すべてのユーザーにメッセージをブロードキャストするためのコードを作成しました。
// 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サーバーはジョンさえ知りません。表示されるのは接続だけです。
したがって、今では、ユーザーを接続だけで保存するのではなく、オブジェクトを保存する必要があると思います。オブジェクトには、userId
とconnection
オブジェクトが含まれます。
考え:
ページの読み込みが完了すると(DOM対応)-Node.jsサーバーへの接続を確立します。
Node.jsサーバーが接続を受け入れると、一意の文字列を生成してクライアントブラウザに送信します。ユーザー接続と一意の文字列をオブジェクトに保存します。例えば
{UserID:"6", value: {connectionObject}}
クライアント側では、このメッセージが到着したら、非表示のフィールドまたはCookieに保存します。(NodeJsサーバーへの今後のリクエスト用)
サーバーがJohnにメッセージを送信する場合:
辞書でジョンのユーザーIDを見つけ、対応する接続でメッセージを送信します。
ここ(メッセージメカニズム)に含まれているasp.netサーバーコードがないことに注意してください。NodeJのみ。*
質問:
これは正しい方法ですか?