2017-07-06 17 views
0

JavaScriptスタック(MongoDB、ExpressJS、AngularJS、NodeJS)を使用してWebアプリケーションを構築しました。登録が動作し、認証が機能し、Socket.ioを使用しているチャットが動作しますが、ユーザのデータでさらなる機能を実行するために、どのクライアントが送信しているのか、どのクライアントがメッセージを受信して​​いるのかを区別する方法が必要です。Socket.ioで受信者と受信者を区別する

P.S.これは私が公開することができないプロジェクトなので、投稿にコードスニペットはありません。うまくいけばいいですね。

答えて

1

究極のデザインは、達成しようとしているものによって決まります。それは "1対1のチャット"サービスか、多分 "1対多放送"です。サービスは匿名ですか?あなたはどのようにしてユーザーをお互いに見つけたいのですか?どれくらい安全である必要がありますか?

私は、各接続(クライアント)に一意の識別子(UID)を割り当てます。これにより、サーバーは「会話」のペアを作成したり、おそらくリスナー(サブスクライバー)とライター(パブリッシャー)のリストを作成してトラフィックを誘導できます。

接続されたユーザーは、2番目に接続されたユーザーのUIDを入力でき、サービスはuidペアを使用してメッセージを前後に投稿できます。
user123が
user0987が

をuser123や掲示板/チャットルームのスタイルを行くために送るuser0987に送信

会話(user123、user0987):

"ボード" を作成 - であるだけで目的地をすべてのテキストのリストが
user123を送っボード "MiscTalk"
user0987がMiscTalk "

各TEを送信「ボードはジョイン" "参加します" xtをサーバに送信すると、サーバはそのテキストをボードに追加し、各クライアントはボードの変更をポーリングします。

すべてのSocketは送信または受信できますが、プログラムは「誰が」ソケットに接続されているかを追跡し、それらの間にトラフィックを誘導する必要があります。

0

クライアントを処理するうまい方法は、ハンドラクラス、クライアントオブジェクトを作成してハンドラにclientListを作成することだと思います。この方法でクライアントを区別しやすくなります。数ヶ月前に私は単純なopen source one-to-one random chat using socket.ioを作りました。ここにはhandlerclient classがあります。

この例がお役に立てば幸いです。

0

)1.グローバルサーバー変数を作成し、接続プロパティをバインドします。認証がtrueの場合は、トークンのデコード後に取得するID(user_idなど)に対してsocket_idを格納します。

global.server=http.createServer(app); 
server.connections={}; 

server.connectionのhasOwnPropertyを(ID)は、ソケットを使用する場合は、他の があなたのIDに対してsocket_idを保存して、あなたのメッセージを送って、あなたのメッセージを送信するために放出します。 この方法では、メッセージを送信するターゲットユーザーの一意のトークンを知る必要があります。
2。認証が真利用の場合はメッセージの使用を送信するときに)あなたはまた、部屋
の概念を使用することができます socket.room=id ; socket.join(id) client.in(id).emit("YOUR-EVENT-NAME",message)

注:、あなた自身の流れを作り、これは私が過去に実施したもののほんの概要ですsocket_idsを格納するためにRedisを使用することを検討する必要があります。

関連する問題