主题:【原创】我有一个问题 -- 美人他爹
为什么没有没有提供?
那是因为现在主流CPU提供的位运算能力,已经足够强,所以没有这个必要了。如果以后某个主流应用中be/le的转换性能成为瓶颈的话,这个功能绝对会加上去。
不信?瞧瞧现在各大厂商为了优化javascript的性能,花了多少心思吧?只要在商业上有必要,技术上可能,这些优化绝对会做。
所以现在不做,仅仅是因为不需要,或者说目前已经足够强了。
何以RPC技术出现这么多年,binary方式的都失败告终?而HTTP RPC大行其道,这是为什么呢。这个问题较有意义一些。我另一个贴子也说了,我本身原来支持的是HTTP的stateless,而非文本化,如果您一定要认为文本不如binary的话,那我觉得讨论stateless更好。
本身与传输内容没有太大关系,您文内老在强调多字节环境下HTTP如何如何之类的。实际上HTTP标准中对多字节单字节有什么约定呢?他只管理服务器与浏览器之间的调用约定,至于多字节单字节会不会出错,跟HTTP没有什么关系(跟浏览器和ISAPI(对IIS来说)或apache mod有关系。您还是把表示层的概念给混进来了。或者更具体的说,您跟前面几个TX犯的错误一样,把HTML跟HTTP给混在一起了。
所以拿来解释http在技术上的成功,说服力还不太大。
按照我的说法,http的成功在于沾了html的光。按照羽羊兄的说法,就是http在成名之初,找到了一个killer app--当然,他站的高度比我更高,更有概括性。而你举的所有失败的例子,基本上都不具备这点。
而即使是你举的例子中的SMTP,因为找到了一个依附于其上的killer app,所以即使它是stateful的,至少到目前,活得还是好好的。这其实也是一个很好的反面例子:stateful和stateless并不是其成败的根本因素,killer app才是。
现成的SMTP,而选择了HTTP?
TELNET、FTP、SMTP。这三个协议成名都在HTTP之前,也都有各自的kiler application。按您的说法,还有按一般逻辑,都不需要重新再发明轮子了,对吧?为什么人们没选择HTML over smtp?没有选择html over telnet?没有选择html over ftp?这几个选择都是可以实现的,尤其是html over smtp,还在大量应用。
今天在物联网那个贴子里发太多了,现在已经超过发贴限制了。把另一个回复贴过来吧。
我觉得您对于协议分析那段写的
过于学院化了。您要是真实的做一回服务器,别的不说,就一个最简单的telnet服务器,您就会痛恨binary不已了。最简单的,也是我前面已经说过的,调试时咋办呢?尤其是RPC调用返回中文的时候。您要能看HEX如看中文般流畅那我非常佩服您。
今天发不了贴了,您有意见只管回,明天下午才能回复。谢谢讨论,尽管在这个贴子里吵成这样非常不开心。
在当初实现之初,http就是设计为简洁高效的文本传输协议的。所以一开始用这个没什么奇怪的--当然,反过来说,不用它,其实也没什么奇怪的。
而人们总是有惰性的,只要一套系统还能跑,还有扩充和兼容的余地,人们就会有限选择改进它,而不是重构它,更别说推倒重来。虽然和当初的初衷和设计相比,早已经面目全非,但是作为历史遗留问题,存在就是道理。
FTP,都可以满足HTML传输要求对吧。HTML内容本身并不要求stateless传输的。那么说按人都是有惰性的说法,就根本不该出现HTTP协议了,因为这是典型的推倒重来,尤其是HTML over SMTP很快就实现了。至于您说的:虽然和当初的初衷和设计相比,早已经面目全非,但是作为历史遗留问题,存在就是道理。您可能想不到,HTTP协议自HTTP1.1以来已经有近10年没有变动了(RFC 2616,1999年6月通过),倒是您非常推崇的HTML,一直在修修补补。
老是提示2小时内20贴,这是怎么回事呢。晕。
在51单片机上驱动ISA口的8029网卡,在裸机上用汇编实现一个完整的telnet服务器和客户端。另外,为了实现用单片机上bbs(当然是基于telnet协议的那种,不知道还有多少人记得那种古老的bbs?)灌水的目的,还特意为4x4小键盘做了一个中文输入法。这就是无聊的我的学生年代干的很疯狂的活之一。
所以在开发效率这点上我没有什么异议。其实,用二进制协议之所以高效,是因为从协议制定到协议实现,都做了很多的优化工作。而在基于文本的协议中,这些工作,都交给了程序来执行。所以在运行效率和开发效率上,两者刚好反过来,至于权衡取舍,那就看具体的情况吧。
当然,我不是那个年代过来的,所以不清楚具体的情况。
但是,一般来说,如果出现这些情况,原因无非是几种情况:要么是原作者的偏好、要么是当时没有其他协议很好的二次开发库、要么是当时的实现在某些方面有问题。
这其实没什么太奇怪的,我也没什么兴趣在这方面过于追究。例如说c当初没有定义bool类型,所以各个C的库,都弄出五花八门的bool,相信熟悉c的人,随手都可以列举一大串。到了现在,C99终于有了bool(还是_bool?),但是那些山寨版的依然大行其道。这个时候,我们来问:为什么c语言有bool,但是依然有那么多库自己非要弄一套?类似的例子还有很多,例如说定长整形也是这样。
btw,我并不推崇html,事实上我干的活,基本上从来没和html怎么打过交道。所以它怎么好也罢,怎么不好也罢,我都没有深入的认识。所以在这方面,我也只是从我的某些其他经验来推断和分析的,一家之言而已。
你们的讨论我学到很多东西,可别生气,你们生气了我怎么学学习呢。
花之,
恭喜:你意外获得【通宝】一枚
鲜花已经成功送出,可通过工具取消
提示:此次送花为此次送花为【有效送花赞扬,涨乐善、声望】。
这里大家也都提到了,主要是因为stateless,来适应互联网大量用户请求的情况,是不是还有其他类似的但没流行起来就不清楚了。webservice应该是http流行起来后的事,为了state,为了rpc等等,很蹩脚,用POX,用http get/post/rest是返璞归真。
互联网上的IT开发,类似于从主机过渡到个人电脑,是个paradiam shift,短期内将老的开发方式加装的新的技术基础上是个过渡过程,有提高老一代开发团队效率,进入市场等意义。过了这个阶段,新一代的开发团队自然会寻求如何能最大程度利用新技术基础的解决手段,这本来就是技术基础发生变更的本来原因。不同的是,有人高瞻远瞩为下一个技术进步铺路,有人为了挣口饭吃忙不迭的跟在后面学习,一个产业自然的食物链而已。