如何正确关闭socket.io/websocket-client?

Chr*_*ris 11 node.js socket.io

我正在尝试使用LearnBoost的socket.ionode-websocket-client创建一个测试.客户端和服务器之间的通信工作很好.完成所有通信后,我关闭客户端和服务器.然而程序挂起,等待一些未知的回调.两个问题:

  1. 以下程序在等什么?
  2. 是否有用于诊断节点程序中未完成回调的工具?

var connect = require('connect'),
    io = require('socket.io'),
    WebSocket = require('websocket-client').WebSocket;

var port = 7111;

var server = connect.createServer();

var socket = io.listen(server); 
socket.on('connection', function(client) {
  client.send('Welcome!');

  client.on('message', function(message) {
    console.log(message);
  });

  client.on('disconnect', function() {
    console.log('closing');
    server.close();
  });
});

server.listen(port, function() {
  var ws = new WebSocket('ws://localhost:' + port + '/socket.io/websocket');
  ws.onmessage = function(message) {
    console.log(message.data);
  };

  setTimeout(function() {
    ws.send('~m~3~m~Yo!');
    ws.close();
  }, 10);
});
Run Code Online (Sandbox Code Playgroud)

编辑:更改WebSocket的变量名称ws以避免混淆

Ray*_*nos 5

var socket = io.listen(server);
Run Code Online (Sandbox Code Playgroud)

您已在端口上创建了套接字.你从来没有关闭它.

socket.server.close() 关闭你的(socket.io)套接字.

如有疑问,请阅读socket.iogithub 示例

socket.server === server它是您传入的服务器,在liste语句中,因此它已关闭.我不确定它在等什么.


Det*_*ect 0

该程序正在等待,因为 socket.io(服务器)仍在侦听传入连接。我不知道有什么办法可以停止倾听。