[解決済み] WebSocketで特定の接続ユーザーにメッセージを送るには?
質問
にメッセージをブロードキャストするコードを書きました。 全て にメッセージを送るコードを書きました。
// 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 ready) - Node.jsサーバーへの接続を確立します。
-
Node.jsサーバーが接続を受け入れたら - 一意の文字列を生成し、クライアントブラウザに送信します。ユーザー接続と一意の文字列をオブジェクトに格納します。
{UserID:"6", value: {connectionObject}}
-
クライアント側では、このメッセージが到着したら - 隠しフィールドまたはクッキーに保存します。(今後のNodeJsサーバーへのリクエストのために)
サーバーがJohnにメッセージを送りたいとき。
-
辞書からjohnのUserIDを探し、対応するコネクションでメッセージを送信します。
-
ここ(メッセージメカニズム)には、asp.netのサーバーコードがないことに注意してください。
質問です。
これは正しい方法なのでしょうか?
どのように解決するのですか?
これは正しい方法というだけでなく、唯一の方法です。基本的に、各接続には一意の ID が必要です。そうでなければ、それらを識別することができないので、それはとても簡単です。
さて、それをどのように表現するかは別の話です。オブジェクトを
id
と
connection
プロパティは良い方法です。また
id
を直接接続オブジェクトに追加することもできます。
また、ユーザー間の通信を行う場合、ターゲットユーザーのIDも送信しなければならないことを覚えておいてください。
関連
-
[解決済み】Node.jsとブラウザ間でコードを共有するにはどうすればいいですか?
-
[解決済み] ブラウザからWebSocketのPing/Pongフレームを送信する
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?
-
[解決済み] webSocketServer node.js クライアントを区別する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法