分享一些Comet开发经验

    技术2022-05-13  10

    前言

    本comet技术主要用于数据库持久层的 穿越防火墙 远程访问。只要有一台中继网站,任意地点的数据库都能被访问。

     

    Comet概念介绍

    WebIM、网页的客服、meebo等大家听说过了。最近还有个兄弟开源了个网页客服叫,PowerTalk。各位可以搜索一下。

    这些最新最炫的技术,用了一个叫comet的架构。

    comet对于我来说= http长连接

    这个是一个通俗的解释。

    老外最擅长就就是发明概念,生怕别人忘了自己的存在。因此把一个很简单的东西搞了一个摸不着边的名词:Comet。

     

    Comet思想怎么来

    先抛开comet,给个案例分析:

     

    局域网(防火墙内)的客户端要与外界联系,如何做到?必然想到了客户端主动发出申请,穿越防火墙 。否则外界无法获得客户端地址(什么xxx映射、路由的就先不谈了)。

     

    什么技术能穿越防火墙?必然是Http协议了,因为80号端口是不会封的。(ftp、smtp、pop之类的再闪开,别找我岔)

     

    外界的信息如何传递到客户端?必然外界把信息放在一个公共地方(寄存中心),客户端主动链接去取这个信息。这样实现了互通了。

     

    但是,客户端什么时候知道外界放了信息呢?传统的思想,就是客户端轮询寄存中心 。可是挑剔的技术人员们怎么能够忍受这种简直是侮辱智商的方案呢?于是,Comet出来了。

     

    Comet技术牛逼的地方,在于

    1. 当客户端发出了链接申请

    2. 寄存中心先把这个申请 存在哈希表

    3. 寄存中心寻找有没有属于这个申请 的回复信息(byte[])

    4. 如果发现了有对应的回复信息,那么交给申请输出 (response.write(byte[])),然后返回这个申请

    5. 如果在一段时间内(60sec)仍然没有人发消息给这个申请 ,那么返回这个申请 ,至于返回什么自己定义吧,比如(response.write("sorry, timeout. please reconnected."))

    6. 客户端继续发出一个新的申请 ,回到2了。

     

    comet的关键就是在客户端发出的请求被服务器先持久了 。如果用代码说话,可以看:

     

     

     

     

    ASP.NET 下的COMET实现

    不同的技术,对comet可以有不同的实现,那么在.net下,就要找到最适合的。

    CodeProject上有2篇超级棒的入门文章,我建议先玩第二篇的例子,然后看第一篇的思想。

    Scalable COMET Combined with ASP.NET

    Scalable COMET Combined with ASP.NET - Part 2

    第二篇只是实现了一个webim,怎么实现每个人有每个人的想法,不必屈泥与具体的实现方式。我就最简单的介绍一下这个超棒的comet


    最新回复(0)