1. ホーム
  2. javascript

[解決済み] WebSocketで特定の接続ユーザーにメッセージを送るには?

2023-03-30 08:14:12

質問

にメッセージをブロードキャストするコードを書きました。 全て にメッセージを送るコードを書きました。

// websocket and http servers
var webSocketServer = require('websocket').server;

...
...
var clients = [ ];

var server = http.createServer(function(request, response) {
    // Not important for us. We're writing WebSocket server, not HTTP server
});
server.listen(webSocketsServerPort, function() {
  ...
});

var wsServer = new webSocketServer({
    // WebSocket server is tied to a HTTP server. 
    httpServer: server
});

// This callback function is called every time someone
// tries to connect to the WebSocket server
wsServer.on('request', function(request) {
...
var connection = request.accept(null, request.origin); 
var index = clients.push(connection) - 1;
...

ご注意ください。

  • ユーザー参照はなく、接続のみです。
  • すべてのユーザー接続は array .

目標 : Node.jsサーバーが特定のクライアント(John)にメッセージを送りたいとします。NodeJsサーバーはどのようにジョンがどの接続を持っているかを知ることができるでしょうか?Node.jsサーバーはジョンのことを知りもしないのに、見えるのは接続だけです。

だから、私は今、接続によってのみユーザーを格納するのではなく、代わりに、私はオブジェクトを格納する必要があると信じています。 userIdconnection オブジェクトを作成します。

アイデアです。

  • ページの読み込みが終了したら(DOM ready) - Node.jsサーバーへの接続を確立します。

  • Node.jsサーバーが接続を受け入れたら - 一意の文字列を生成し、クライアントブラウザに送信します。ユーザー接続と一意の文字列をオブジェクトに格納します。 {UserID:"6", value: {connectionObject}}

  • クライアント側では、このメッセージが到着したら - 隠しフィールドまたはクッキーに保存します。(今後のNodeJsサーバーへのリクエストのために)


サーバーがJohnにメッセージを送りたいとき。

  • 辞書からjohnのUserIDを探し、対応するコネクションでメッセージを送信します。

  • ここ(メッセージメカニズム)には、asp.netのサーバーコードがないことに注意してください。

質問です。

これは正しい方法なのでしょうか?

どのように解決するのですか?

これは正しい方法というだけでなく、唯一の方法です。基本的に、各接続には一意の ID が必要です。そうでなければ、それらを識別することができないので、それはとても簡単です。

さて、それをどのように表現するかは別の話です。オブジェクトを idconnection プロパティは良い方法です。また id を直接接続オブジェクトに追加することもできます。

また、ユーザー間の通信を行う場合、ターゲットユーザーのIDも送信しなければならないことを覚えておいてください。