0

アプリにチャット モジュールを実装しようとしていますが、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);内部で発行すると機能し始めますが、機能しません。roomto

Transport end (close timeout)これが問題を引き起こしているようです。これを解決するにはどうすればよいですか?

4

1 に答える 1

0

Finally found the solution here the problem was with the version of socket.io that I was using.

于 2013-01-23T19:09:22.923 に答える