emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

小半年前,和做IM的同事讨论web IM的ajax实现的时候曾经提起过这样一种做法:维持一个http长连接来等待后台的聊天数据,当聊天数据一到就立刻把数据发送进这个http连接里面并断开连接让xmlhttp开始解析,这样就可以做到客户端对数据的即时响应。这一就是“推模型”的ajax版本。
其实当时我们也怀疑meebo等web IM有可能已经采用了类似的技术,但是未经确认。由于考虑到IM部门有可能需要把这个技术申请专利加以保护,因此很长的一段时间里面不管是论坛上还是blog上我都没有提及过这个想法。
今天偶然在网上发现了一个叫做comet的技术(http://alex.dojotoolkit.org/?p=545),和我们的想法如出一辙,现在已经至少被应用在:

  • GMail’s GTalk integration
  • Jot Live
  • Renkoo
  • cgi:irc
  • Meebo

    消息迟钝到如此地步,汗颜中。

  • 奇怪的是,似乎comet技术不需要断开http连接,不知道是如何让xmlhttp控件开始解析数据的(如果不用xmlhttp技术的话,那不就成了传统的“推模型”了吗?)。

    posted on 2006-06-07 14:20 emu 阅读(1966) 评论(8)  编辑  收藏

    评论

    # re: Comet 2006-06-08 09:31 夕阳(sanlly)
    其实利用xmlhttp来模拟长连接的做法,很多地方都有应用了,大同小异而已。
    个人意见是:如果需要http连接的数量级非常大的,最好不要使用...比如新消息的监听.

    下面是幻宇写的长连接
    http://www.5djs.com/#viewthread.asp?tid=197  回复  更多评论
      

    # re: Comet 2006-06-08 10:02 emu
    谢谢楼上的建议和推荐。
    对于普通的web服务器,确实是难以同时维持大数目的链接的,以前的推模型的聊天室一般都只支持几十人。不过我们在采用这种技术的时候是采用了专门设计的高性能服务器来专门维持链接和转发数据,因此可以做到支持非常大量的同时链接数(据IM部门的同事说一台服务器几十万以上)。  回复  更多评论
      

    # re: Comet 2006-07-19 16:34 holy
    感觉你们的方案还不能算是server push。如果别人连续发n个消息给你,岂不是要关闭n次连接,再打开n次连接?alex提出的comet根本就没有断开连接,所以才和ajax不同。gmail中的chat也没有断开,现在这种应用越来越多了。
    至于连接数量问题,不知到google怎么设计的,不过作为服务器集群牛人,他们应该很好处理了这个问题  回复  更多评论
      

    # re: Comet 2006-07-20 11:31 emu
    链接数量其实对我们不是问题了。但是用xmlhttp/xmlhttprequest的话,链接是必须要断掉的。gmail的chat功能确实比较神奇。  回复  更多评论
      

    # re: Comet 2006-08-30 13:56 王元涛
    xmlhttp在state=3的时候就可以开始解析了,不过那时候javascript只能够处理raw流。  回复  更多评论
      

    # re: Comet 2006-12-23 15:00 dh20156
    EMU,现在进展如何?  回复  更多评论
      

    # re: Comet 2007-01-26 13:52 wsk
    @王元涛
    请问什么是raw流呢,我在state=3时用responseText读取数据的时候会被提示“需要的数据还不能用”的错误,请问这是为什么呢?
    鄙人邮箱:yanyujiangnan_wsk@sina.com  回复  更多评论
      

    # re: Comet[未登录] 2007-04-06 03:49 LUKE
    來我的BLOG 參考COMET相關訊息

    http://rd-program.blogspot.com  回复  更多评论
      


    只有注册用户登录后才能发表评论。


    网站导航: