我正在尝试为我的应用程序实现一个聊天模块并遇到 2 个问题。
第一个是我在套接字中的客户端不断自动断开连接。这就是我正在做的事情。
我的客户在一个动态创建的房间中建立连接,房间的名称是我生成的随机 ID。现在,当客户发送消息时,我打印一个日志以查看房间里有多少人并记录“ 2”在服务器端是正确的。但是当我继续从客户端向服务器发送消息时,它开始显示“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);
});
当有人从任何客户端发送消息并且将包含 RoomID 时,在服务器端引发此事件。msgobj
因此您可以看到我正在记录房间中的人数。
第二个问题是我正在尝试广播从客户端收到的消息。但是没有引发另一个客户端的事件。在上面的代码中,您可以看到我用来向所有其他客户端广播 msg 的最后一行,但是这些客户的事件没有被解雇我不知道为什么。这是我的客户
this.Socket.on('RecieveChat',function(obj){
self.Controller.RecieveChat(obj);
});
这是我的日志
你可以看到RoomID
是一样的,但是房间里的人要离开了,这个快照只显示1 people in room
之前房间里有两个人,然后减少到 1,最终减少到 0。
编辑:
当我更改socket.broadcast.to(String(msgobj.RoomID)).emit('RecieveChat',msgobj);
为它时,socket.broadcast.emit('RecieveChat',msgobj);
它开始工作,但如果我room
使用该to
方法在 a 内部发出,则它不起作用。
Transport end (close timeout)
这似乎是导致问题的原因。如何解决这个问题?