支持百万并发的Web端即时通讯方案

本文介绍了Web端即时通讯的四种技术,重点讲解了Comet技术及其优势,推荐了iComet这款支持百万并发的Comet服务器,并讨论了其分布式部署策略。同时,提到了通过Nginx与iComet配合实现服务的运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。

 

以上4种即时通讯技术各有各的优势和限制,很难决定最佳实践,开发者选型时根据自已的应用场景、开发代价、技术水平等选择适合自已的才是明智选择。

Comet技术简介

以即时通信为代表的web应用程序对数据的Low Latency要求,传统的基于轮询的方式已经无法满足,而且也会带来不好的用户体验。于是一种基于http长连接的“服务器推”技术便被hack出来。这种技术被命名为Comet,这个术语由Dojo Toolkit 的项目主管Alex Russell在博文Comet: Low Latency Data for the Browser首次提出,并沿用下来。

其实,服务器推很早就存在了,在经典的client/server模型中有广泛使用,只是浏览器太懒了,并没有对这种技术提供很好的支持。但是Ajax的出现使这种技术在浏览器上实现成为可能, google的gmail和gtalk的整合首先使用了这种技术。随着一些关键问题的解决(比如 IE 的加载显示问题),很快这种技术得到了认可,目前已经有很多成熟的开源Comet框架。

以下是典型的Ajax和Comet数据传输方式的对比,区别简单明了。典型的Ajax通信方式也是http协议的经典使用方式,要想取得数据,必须首先发送请求。在Low Latency要求比较高的web应用中,只能增加服务器请求的频率。Comet则不同,客户端与服务器端保持一个长连接,只有客户端需要的数据更新时,服务器才主动将数据推送给客户端。

关于iComet服务器

iComet 是一个使用 C++ 语言开发的支持百万并发连接的 comet/push 服务器, 支持百万级并发连接, 内存占用少, 性能优越. 可用于移动 App 的 Push Server(消息推送服务器), 或者用于 Web Push(Web 服务器推). 用于 Web Push 时, 支持的浏览器和操作系统平台包括: Safari(iOS, Mac), Firefox/Chrome(Windows, Mac), IE6+。

为何选择iComet

对于开发者, 为了快速和方便的开发, 应该选择一个支持 Comet 技术的 Web 服务器和一套 JavaScript 库(当然iComet也有开源的Java和Android客户端库可用)。iComet 就是这样的一套解决方案。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询​

 

iComet 分布式部署思路

iComet 本身没有分布式方面的工具。我可以说一个思路:


    部署多台 icomet-server 实例;
    用户调用 sign 申请通道时, 根据 uid 哈希到其中一台;
    当往用户推送消息时, 根据uid哈希推送到他所在的那一台icomet-server上。


如果你可以开发, 那便写程序订阅 psub 接口, 在一个中心节点保存uid和icomet-server的对应关系(路由表)。

如何支持百万并发连接 C1000K

需要两个步骤:


    第一步: 操作系统要支持;
    第二步: 修改 icomet.conf,设置 max_channels: 1000000。

Web端JavaScript调用方法

1

2

3

4

5

6

7

8

9

var comet = new iComet({

    channel: 'abc',

    signUrl: 'http://127.0.0.1:8000/sign',

    subUrl: 'http://127.0.0.1:8100/sub',

    callback: function(content){

        // on server push

        alert(content);

    }

});

Nginx + icomet


You can integrate icomet with nginx. If you are running you website on port 80 with domain . That is you visit your website home page with this url:

1

http://www.test.com/


Then you want to run icomet on the same server with port 80, for the concern of firewall issue. You can config nginx to pass request to icomet:

1

2

3

4

5

6

7

8

location ~ ^/icomet/.* {

    rewrite ^/icomet/(.*) /$1 break;

    proxy_read_timeout 60;

    proxy_connect_timeout 60;

    proxy_buffering off;

    proxy_pass   [url=http://127.0.0.1:8100;]http://127.0.0.1:8100;[/url]

}


Then, this url is used to subscribe to icomet channel xxx:

1

http://www.test.com/icomet/sub?cname=xxx

WebIM说明 WebIM是一款基于jQuery的一款web即时通讯插件,姑且这么称呼吧。插件最大程度实现了IM的常用功能,除即时通讯的常用功能外,还加入了:消息盒子、窗口抖动、添加删除好友、最近联系人、超时登录界面、网站小秘书、聊天记录、发送频率限制、发送产品、发送名片、发送表情、产品分享、黑名单、举报、收藏、公告、智能网址过滤、消息提醒、修改资料、名片二维码、禁止粘贴、收起联系人列表、推荐好友等30余项改进。全浏览器兼容。 插件调用简单方便,只需在现有的web系统中加入几行代码,理论上可嵌入任何web系统。 2012年项目,已不再维护。 配置 $(function() { $(document).FnWebIM({ autoLogin :true, //boolean型,默认是否自动登录,true:自动登录,false:手动登录,默认为true msgRefreshTime :1000, //number型,消息刷新时间,单位为ms friendRefreshTime :10000, //number型,好友刷新时间,单位为ms showSecretary :true, //boolean型,默认是否显示小秘书,true:显示,false:不显示,默认为true noticeContent :"唐僧师徒历经千辛万苦,终于见到了佛祖……", //string型,公告内容 为空时不显示公告 sendPicture :true, //boolean型,是否允许发送图片,true:允许,false:不允许,默认为true msgMaxSize :300, //number型,单条消息最大允许字符 msgSound :false, //boolean型,是否开启声音提醒,true:开启,false:关闭,默认为true defaultWindow :"" //string型,登录后打开新聊天窗口,此处接收的参数为联系人的uid,否则会出错 }); }); 详细说明文档 http://www.zi-han.net/case/im/help.html 示例 http://www.zi-han.net/developer/721.html 注意 请在服务器(如localhost)环境下打开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值