2012-06-09 285 views
3

我使用的是Socket.io和Node.js,並且在Stingray負載均衡器後面有兩個實例。Socket.io和負載均衡器

負載平衡器使用通用流設置,大部分似乎工作正常。但是,我注意到一些零星的行爲。

基本上,有兩個個體可能連接到的實例,如果一個實例發射到所有套接字,另一個實例將不會看到或得到這些發射。

這聽起來準確嗎?有誰知道如何確保由任一服務器完成的發射都發送到連接到任何服務器的客戶端?

謝謝! Dave

回答

0

我在開發Mote.io時遇到了類似的問題,並決定使用託管解決方案而不是構建負載平衡器。處理這個問題非常困難,因爲您需要跨服務器同步數據或將客戶端負載平衡到同一實例,以確保它們獲得所有相同的消息。

Socket.io不會有太大的幫助。您需要實施redis,一些其他數據同步或負載平衡應用程序。

PubNub也會照顧到這一點。後端負責在一個抽象級別同步消息,負載均衡等,所以你只需提供一個通道名稱,PubNub將確保該通道中的所有客戶端都能獲得該消息。

在代碼

enter image description here

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行即時聊天應用