五千年(敝帚自珍)

主题:【原创】我有一个问题 -- 美人他爹

共:💬73 🌺79
全看分页树展 · 主题 跟帖
家园 MM下线鸟,多个短回复合成一个长回复[其它几个可以无视]

俺有个坏毛病,就是一边开着QQ跟MM聊天一边回复,所以就一堆短回复,这也是为什么俺很少发主贴的原因。。。。现在MM下线鸟,把几个短回复整合成一个吧,也方便大家看。结果发现俺等级2个小时只能发10贴,晕。MM误事啊。[又花5分钟时间把短回复的贴子标题全改掉了,K,以后再不干这样的事儿了。]

1。yueyu同学认为,HTTP适合传文本,而RPC不适合用文本,言下之意应该用二进制方式比HTTP更合适。

反驳:

显然yueyu同学对于RPC的情况不了解。在之前,比如CORBA,使用的就是二进制协议,结果被淘汰了。RPC不适合用二进制一个主要原因就在于RPC很多是在异构平台,什么是异构平台呢,就是UNIX/LINX/WINDOWS之类OS的大杂烩。。异构平台的一个大问题就在于二进制数据解释上有分歧,这个类似于中文乱码问题,比如MOTOROLA CPU和INTEL CPU架构下有big indian和little india的问题,又比如早期的机器对于字节长度的定义还不一样。这样构造一个各平台都能用的RPC协议几乎成了不可完成的任务。CORBA的失败,有很多原因,这个就是其一。而文本用于RPC有很大的优势就是定义明确,不管是ANSI还是UNICODE,各平台都是一样的。而且,RPC调用,如果您真的做过一遍,就会明白,实际上文本已经能够满足绝大多数要求了。

2。yueyu同学认为,HTTP协议解决不了TIME_WAIT问题。这个是在有意无意的混淆概念。TIME_WAIT是传输层的问题,HTTP协议是应用层和表示层的协议,两者根本就不发生关系。任何一个协议,包括yueyu认为的,一种“理想”的binary的RPC协议,都不可能解决TIME_WAIT问题。这个问题是TCP/IP协议栈上multiplex的问题,跟HTTP没有任何关系。

3。yueyu同学认为,HTTP1.1的修正太大了,以致于没有实用价值。这个一方面yueyu同学的概念没搞清,HTTP1.1协议有一个KeepAlive标头会影响到连接情况,但这个实现跟原文所说的修改socket完全没有关系。这个的实现只需要做一个socket连接池即可解决问题。HTTP1.1不是什么先进的玩艺儿,主流的web server没有一个不支持它的。HTTP1.1也不需要修正socket,那是TCP/IP栈的事。如果实现HTTP1.1要修改tcp/ip栈的话,那Robert McCool就要疯掉了,Linus也要疯掉了。(记住,当初BORLAND kylix需要修正linux内的一个BUG,结果被LINUX社区狂骂,要Robert McCool也这么干的话,apache就不可能有linux版本了)

4。关于长连接和短连接,这个是个大题目。很多对server side不理解的TX都有一种错觉,就是网络连接/数据库连接应该越早打开,越迟关闭越好。这是不对的,因为现代的数据库都有连接缓充概念,并且在服务器端和客户端都有连接池。打开连接的代价比想像中要小得多。并且多数应用服务器都是鼓励要用连接时再打开的,这样能够提高服务器的可伸缩性。比如EJB吧(如果需要COM+的例子,也一样的),stateless bean的效率最高这大家都公认,一个原因就是不需要维护两次调用间的状态,如果把数据库连接暂存下来,会导致surrogate的代价,反而效率大降。

5。我想我和Yueyu同学的看法分歧主要原因就是我是做application server的,而Yueyu同学可能主要是网络游戏编程,这是完全不同的两种情况。网络游戏那样的连接,只能是长连接,没有什么办法。但application server强调的是快速短连接调用,一个application server的成败很大程度上受其对象缓存技术高低的影响。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河