为什么iComet比nginx-push-stream-module更好?
有些项目需要使用”Web服务器推(comet)技术时, 便因为 Web Server 用的是 Nginx 便选择了 nginx-push-stream-module, 但是根据我们的使用经验, nginx-push-stream-module 非常坑, 只适合同时在线几千人的小网站使用. 下面对比 iComet 服务器和 nginx-push-stream-module:
1. 安全和验证问题
nginx-push-stream-module 本身没有安全验证机制, 客户端和浏览器可以随意订阅任意通道(channel). 如果想加入验证, 就要使用 nginx + lua 了, 一般的模式是通过 HTTP 访问其它的接口进行验证.
相比较而言, iComet 自带了 token 验证机制, token 通过业务服务器来分配, 业务服务器可以进行业务相关的权限验证, 如账号密码, 好友关系等等. 一旦 token 生成之后, 验证过程不需要依赖第三方, 全部在 iComet 内部, 所以速度非常快.
2. 程序的稳定性和高并发
nginx-push-stream-module 在只有几千个连接的时候性能和稳定性非常好, 不过, 当并发连接增多到几万之后, 这个模块就会频繁出错了, 最常见的两个错误是:
1. push stream module: could not send content header to subscriber
2. push stream module: Don’t have at least one of the mandatory headers: Connection, Upgrade, Sec-WebSocket-Key and Sec-WebSocket-Version
这两个错误莫名其妙, 似乎是共享内存的 BUG, 导致 nginx 子进程不断重启, 我在官方提问, 作者也解决不了.
而 iComet 支持百万并发连接也非常稳定.
3. 功能
nginx-push-stream-module 的目标只是 Web 应用, 但是, iComet 为移动 App 了接口, 可以方便地融合进移动 App 中. 目前, iComet 已经提供了 iComet Android SDK 和 Demo.