2

NodeJS ソケットを使用してクライアントを接続できるようにする必要がありますが、後で特定のクライアントにデータを送信できるようにする必要があります。

以下は、私が今行っていることの例です。

var net = require('net');
var sockets = [];

var server = net.createServer(function(c) {
    c.sock_id = sockets.push(c);
    c.on('close', function() {
        delete sockets[c.sock_id];
    });
});
server.listen(1234, function() {});


function send_to_socket(id,message) {
    sockets[id].write(message);
}

これは、特にソケットが Redis のようなものに格納されている環境では、これを処理する正しい方法とは思えません。

誰かがこれを処理する適切な方法に光を当てることができますか?

4

1 に答える 1

0

ソケットには一意の識別子が必要です。それらが接続層で一意に識別されない場合は、手動で識別を作成する必要があります。processId + incrementまたはその他のネットワークの信頼できる IDにすることができます。

次に、ソケットを持ち、メッセージキューの処理とメッセージの送信を担当するワーカーがあります。
Redis はソケットの ID を簡単に保存できますが、このソケットがバインドされているワーカー ID も保存する必要があります。
次に、互いにメッセージを送信できるようにするために、ワーカー間で直接通信する必要があります。これは、ワーカーまたはソケットのメッセージ キューを使用することで Redis を介して実行できます。このソケットを担当するワーカーは、メッセージをプルし、送信のために処理します。
または、たとえば ZeroMQ を使用してワーカーからワーカーに直接通信し、直接メッセージを送信することもできます。メッセージには Redis ソリューションをお勧めします。単一の入力ポイントであっても、このソリューションはより柔軟で信頼性が高くなります。

ソケットのリストをキー値オブジェクトとして保持することをお勧めします。ここで、キーはソケットの ID であり、値はソケットまたはオブジェクトであり、もう少し情報があり、それ自体をソケットにします。
ソケットにデータをアタッチするには、ソケット オブジェクトに値を追加するだけです。

于 2013-07-04T09:30:01.037 に答える