如何正确closuressocket.io / websocket客户端?

我正在尝试使用LearnBoost的socket.io和node-websocket-client来创build一个testing。 客户端和服务器之间的通信很好。 所有通信完成后,我closures客户端和服务器。 然而程序挂起,等待着一些未知的callback。 两个问题:

  1. 以下程序正在等待什么?
  2. 是否有一个诊断节点程序中未解决的callback的工具?

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); }); 

编辑:将WebSocket的variables名称更改为ws以避免混淆

 var socket = io.listen(server); 

您已经在端口上创build了一个套接字。 你从来没有closures它。

socket.server.close()closures您的(socket.io)套接字。

如果有疑问,请阅读socket.io github 示例

socket.server === server它是你传入的服务器,在liste语句中,所以它是closures的。 我不确定它在等什么。

在closures所有连接的方式下,可以运行多个expressotesting(使用socket.io和socket.io-client)。

该解决scheme是棘手的,越野车,但在0.8.5工作。 主要的问题是关于图书馆使用websockets(节点websocket客户端)。

目前,在socket.io上,OS贡献者已经修补了websocket客户端 。 所以,我们必须对我们的socket.io-client npm包执行相同的操作,以便能够在套接字客户端上使用finishClose方法。 Socket.io-client使用websocket库作为npm包,所以你必须find这个文件(websocket.js),并用socket.ioreplace它。

之后,您可以使用finishClose方法确保连接已closures,并使用一些自定义的服务器/客户端套接字设置,testing将正确运行。

  var io = require("socket.io").listen(port); io.set('close timeout', .2); io.set('client store expiration', .2); var client = require("socket.io-client").connect( "http://localhost", { port: port , 'reconnect': false, 'force new connection': true}); client.on('connect', function() { client.disconnect(); }); client.on('disconnect', function() { client.socket.transport.websocket.finishClose(); io.server.close(); }); io.server.on('close', function() { setTimeout( function() { done(); }, 500); }); 

希望有人能帮忙

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