我们想要进入推送技术,我们的用例如下:
- 大量的客户端同时存在(几个100000)
- 低消息速率(~ 1/分钟)
- 小数据(<500字节/消息)
- 延迟小于2秒
现在我们有两个相互竞争的解决方案:
-
我们可以建立一个真正的websocket/longpolling服务器集群(我们将评估atmosphere, playframework和socket)。IO上的节点或顶点。x);这将导致多个100,000套接字同时处于活动状态,几乎所有套接字都处于空闲状态(除了25% IE不断重新建立长轮询连接);
-
我们可以使用静态json文件后面缓存web服务器(invalidatable)作为经典轮询的端点;这将导致来自浏览器的100,000个请求/秒,几乎所有请求的响应结果代码都是304。
你会提出哪个解决方案?特别是在资源消耗方面:cpu、内存、流量、io?
我们使用了一个非常简单的方法:
浏览器对通过akamai分发的静态文件进行周期性ajax轮询。所以很少有请求到达我们的后端。文件的缓存时间设置为5秒,轮询间隔设置为5秒。
它不是很优雅,也不是实时的,但它适合我们的用例