我在开发Mote.io时遇到了类似的问题,并决定使用托管解决方案而不是构建负载平衡器。处理这个问题非常困难,因为您需要跨服务器同步数据或将客户端负载平衡到同一实例,以确保它们获得所有相同的消息。
Socket.io不会有太大的帮助。您需要实施redis,一些其他数据同步或负载平衡应用程序。
PubNub也会照顾到这一点。后端负责在一个抽象级别同步消息,负载均衡等,所以你只需提供一个通道名称,PubNub将确保该通道中的所有客户端都能获得该消息。
在代码
Enter Chat and press enter
<div><input id=input placeholder=you-chat-here /></div>
Chat Output
<div id=box></div>
<script src=http://cdn.pubnub.com/pubnub.min.js></script>
<script>(function(){
var box = PUBNUB.$('box'), input = PUBNUB.$('input'), channel = 'chat';
PUBNUB.subscribe({
channel : channel,
callback : function(text) { box.innerHTML = (''+text).replace(/[<>]/g, '') + '<br>' + box.innerHTML }
});
PUBNUB.bind('keyup', input, function(e) {
(e.keyCode || e.charCode) === 13 && PUBNUB.publish({
channel : channel, message : input.value, x : (input.value='')
})
})
})()</script>
的10行即时聊天应用