2017-11-04 13 views
2

私は1対1のチャットを実装したいと思いますが、これを実装する方法は混乱しています。 各ソケットにメッセージを送信してこれを達成しようとしていますが、クライアントが切断されてソケットIDが変更された場合、データベースに格納されているソケットIDでメッセージを送信できなくなります。これを実装する方法に関するヒント?クライアントが切断して再度接続すると、ソケットIDが再発行されますか?サーバーはSocket.ioとnode.jsにありますか?

ありがとうございました。

答えて

1

新しいセッションごとに新しいクライアントソケットインスタンスが作成されるため、IDが変更される可能性があります。ユーザーを識別できるようにするには、ソケットIDではなくuser_idを使用する必要があります。たとえば、新しいセッションのとき uのようなログインロジックを実装することができます

io.on("connection", function(socket) { 

    // Accept a login event with user's data 
    socket.on("login", function(userid) { 
     // store socket instance against userid in session store like redis. 
    }); 
}); 

この方法では、すべての接続に新しいソケットインスタンスを保存しています。

注:uはuはRabbitMQのような他のメッセージング・ブローカーをチェックすることもでき、オフラインメッセージ機能が必要な場合は、受信機がオンラインであれば使用するソケットだけメッセージを送ることができます

Building NodeJs Chat Application with RabbitMQ

+0

ありがとうございました、これは非常に有用でした。オフライン機能のために、私はデータベースにメッセージを保存できますか?ユーザーがオンラインになると、そのメッセージを取得できます。 –

+0

はい、独自のメッセージキューを構築しなければならず、ユーザーがすべてのメッセージをキューから取得するようになるたびにメッセージキューを構築する必要があります。さもなければ、RabbitMqやamqpのような他のメッセージブローカを考慮して、自分でキューを処理します。 – pulankit

+1

私はsocket.Ioの新しいです、ちょうど周りに遊んでいた、多分私は同じようにしようとすることができます。とにかくあなたの助けをありがとう。 :) –

関連する問題