Node Socket.io客户端认为连接后它已断开连接

时间:2014-10-21 08:31:29

标签: node.js sockets socket.io

我的套接字将连接但无法接收任何方向的消息。我设置了如下所示的日志记录。在服务器端,我看到记录了连接,并在页面关闭时记录断开连接。如果我终止服务器,客户端会记录“Socket disconnected”。但是没有收到任何方向的排放。我做了一些日志记录,并确定客户端套接字的socket.connected字段为false

此时我完全失去了。字面上,一旦我建立连接,客户端认为它的套接字已断开连接,但是当我关闭浏览器窗口时,服务器仍然看到它断开连接。我正在运行socket.io 1.1.0。谢谢你的帮助!

服务器:

io.sockets.on('connection', function(socket) {
  logger.info('Socket connected. ID: ' + socket.id);

  socket.on('refresh', function() { 
    logger.info('Refresh received from ID: ' + socket.id);
  });
  socket.on('disconnect', function() { 
    logger.info('Disconnect received from ID: ' socket.id);
  });
});

客户端:

var socket;
$(document).ready(function() {
  socket = io.connect('http://localhost');
  console.log(socket.connected);

  socket.emit('refresh');

  socket.on('disconnect', function() {
    console.log("Socket disconnected.");
  });
});

3 个答案:

答案 0 :(得分:3)

您需要在自动断开连接后重新连接

socket.on('disconnect', function() {
   console.log("Socket disconnected.");
   socket.socket.reconnect();
});

答案 1 :(得分:2)

io.connect后没有立即连接套接字。你必须等待:

var socket;
$(document).ready(function() {
  socket = io.connect('http://localhost');


  socket.on('connect', function () {
    console.log(socket.connected);
    socket.emit('refresh');
  });

  socket.on('disconnect', function() {
    console.log("Socket disconnected.");
  });
});

更多活动:http://socket.io/docs/client-api/#manager(url:string,-opts:object)

答案 2 :(得分:1)

看起来问题出在socket = io.connect(document.URL);我尝试通过socket = io();使用socket.io自动发现,现在我的所有排放都正常工作。