0

我正在尝试为我的应用程序实现一个聊天模块并遇到 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)这似乎是导致问题的原因。如何解决这个问题?

4

1 回答 1

0

终于在这里找到了解决方案,问题出在我使用的 socket.io 版本上。

于 2013-01-23T19:09:22.923 回答