アプリにチャット モジュールを実装しようとしていますが、2 つの問題が発生しています。
1 つ目は、ソケット内のクライアントが自動的に切断され続けることです。これが私がやっていることです。
私のクライアントは、動的に作成された部屋に接続され、部屋の名前は私が生成したランダムな ID です。クライアントがメッセージを送信すると、ログを出力して、部屋に何人の人がいるかを確認し、ログに記録します」サーバー側では正しいですが、クライアントからサーバーにメッセージを送信し続けると、「1」クライアントが接続されていることが示され、しばらくすると、部屋に0クライアントが接続されていることが示されます。人々なぜこれが起こっているのですか?
socket.on('SendChat',function(msgobj){ //pass the message to all people in the room.
console.log("Msg from" + msgobj.MsgSenderName + " in RoomID = "+ msgobj.RoomID);
console.log("People in room " +io.sockets.clients(msgobj.RoomID).length);
socket.broadcast.to(String(msgobj.RoomID)).emit('RecieveChat',msgobj);
});
このイベントは、誰かがいずれかのクライアントからメッセージを送信すると、サーバー側で発生しmsgobj
、RoomID が含まれます。したがって、部屋にいる人数を記録していることがわかります。
2 番目の問題は、クライアントから受信したメッセージをブロードキャストしようとしていることです。しかし、他のクライアントでのイベントは発生しません。上記のコードでは、msg を他のすべてのクライアントにブロードキャストするために使用した最後の行を確認できますが、これらのクライアントでのイベントは発生しません。理由はわかりません。クライアントにあるものは次のとおりです。
this.Socket.on('RecieveChat',function(obj){
self.Controller.RecieveChat(obj);
});
ここに私のログがあります
同じことがわかりますがRoomID
、部屋にいる人は去っていきます。このスナップショットは1 people in room
、部屋に 2 人の人がいて、その後 1 になり、最終的には 0 になったことを示しているだけです。
編集:
に変更socket.broadcast.to(String(msgobj.RoomID)).emit('RecieveChat',msgobj);
すると、メソッドを使用してsocket.broadcast.emit('RecieveChat',msgobj);
内部で発行すると機能し始めますが、機能しません。room
to
Transport end (close timeout)
これが問題を引き起こしているようです。これを解決するにはどうすればよいですか?