3

私は Socket.io と Node.js を使用しており、Stingray ロード バランサーの背後に 2 つのインスタンスがあります。

ロード バランサーは Generic Streaming を使用してセットアップされており、ほとんどの場合、正常に動作しているようです。ただし、いくつかの散発的な動作に気付いています。

基本的に、個人が接続できるインスタンスは 2 つあります。一方のインスタンスがすべてのソケットに発行する場合、もう一方のインスタンスはそれらの発行を表示または取得しません。

それは正確に聞こえますか?いずれかのサーバーによって行われた発行が、任意のサーバーに接続されているクライアントに確実に送信されるようにする方法を知っている人はいますか?

ありがとう!デイブ

4

1 に答える 1

1

Mote.ioの開発中に同様の問題に遭遇し、ロード バランサーを構築する代わりに、ホストされたソリューションを使用することにしました。サーバー間でデータを同期するか、クライアントが同じインスタンスに負荷を分散して、すべて同じメッセージを確実に受信できるようにする必要があるため、この問題に対処するのは非常に困難です。

特にSocket.ioはあまり役に立ちません。redis、その他のデータ同期または負荷分散アプリを実装する必要があります。

これも PubNub が処理します。バックエンドは抽象レベルでメッセージの同期、負荷分散などを担当するため、チャネル名を指定するだけで、PubNub はそのチャネル内のすべてのクライアントがメッセージを確実に受信できるようにします。

10 行のコードによるリアルタイム チャット アプリ

ここに画像の説明を入力

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>
于 2014-02-01T19:47:07.170 に答える