【问题标题】:Clients get disconnected automatically客户端自动断开连接
【发布时间】:2013-01-24 03:09:22
【问题描述】:

我正在尝试为我的应用实现聊天模块并遇到 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); 时,它开始工作,但如果我使用to 方法在room 内发出信号,它就无法工作。

Transport end (close timeout)这似乎是导致问题的原因。如何解决这个问题?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 2017-07-17
      • 2021-12-05
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多