我正在尝试为我的应用实施聊天模块并遇到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);
});
当有人从任何客户端发送消息并且msgobj
将包含RoomID时,会在服务器端引发此事件。因此,您可以看到我正在记录会议室中的人数。
第二个问题是我正在尝试广播我从客户端收到的消息。但是没有引发其他客户端的事件。在上面的代码中你可以看到我用来向所有人传播消息的最后一行其他客户,但这些客户的事件没有解雇我不知道为什么。这是我的客户端的内容
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
内部发光,它就会开始工作但无法正常工作。
Transport end (close timeout)
这似乎导致了这个问题。如何解决这个问题?