2017-04-17 17 views
-2

ノードjsプロジェクトのsocket.ioによるチャットやその他の通知を実装しています。グローバル変数へのユーザソケットマッピングの保存

私たちはユーザ - ソケットマッピングを保つ必要があります。このため

我々はapp.js

global.user_sockets = {}; 

でグローバル変数を宣言し、新しい接続がトークンauthetication後に作成するときにユーザーID、user_sockets配列のソケットのマッピングを割り当てています。

user_sockets[data.userId]=socket; 

グローバル変数を使用するには、多くの推測があります。いくつかのユーザーは、複数のプロセスで使用するとうまくいかないと言います。

これに関する他の解決策はありますか?

+0

Redisのパブリッシュ/サブスクライブをご覧ください。 – Gntem

+0

これについても考えましたが、この実装ではなく、別のインメモリ管理レイヤーを追加すると便利ですか? – jit

+0

ユーザーがログインしてセッションを開始した場合は、socket.idをユーザーセッションIDに関連付けるだけで、パラメータとしてsocket.ioサーバーオブジェクトを渡したり、emitなどを呼び出すことができます。また、レディスはパブリッシュ/サブスクライブを行い、フォーマットされたメッセージを公開し、加入者機能がすべてを処理し、作業全体を最小限に抑えて1つのスクリプトにすることができます。グローバルを使用することに同意する多くの人が最良の選択ではない。多くの/他のオプションを評価して、アプリケーションに最適なものを判断したい場合があります。 – Gntem

答えて

0

グローバル変数ではなく、使用している関数のパラメータとして、user_socketsを渡すことができます。しかし、これはパラメータの数を1つ増やして、それは問題ではないと思います。

関連する問題