如何正确关闭socket.io/websocket-client?
我正在尝试使用LearnBoost's socket.io和node-websocket-client来创建测试。客户端和服务器之间的通信很好。所有通信完成后,我关闭客户端和服务器。然而,这个程序仍在等待一些未知的回调。两个问题:如何正确关闭socket.io/websocket-client?
- 下列程序正在等待什么?
- 是否有诊断节点程序中未解决的回调的工具?
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);
});
编辑:改变网页套接字的变量名ws
为了避免混淆
var socket = io.listen(server);
您已经在端口上创建了套接字。你从来没有关闭它。
socket.server.close()
关闭您的(socket.io)套接字。
如有疑问阅读socket.io
github上examples
socket.server === server
它是如此它关闭你传递,在清单当然语句中的服务器。我不确定它在等什么。
在关闭所有连接并能够运行多个expresso测试(使用socket.io和socket.io-client)的方法下面。
该解决方案是棘手和bug,但工作在0.8.5。主要问题是关于库使用websockets(node-websocket-client)。
目前,在socket.io上,操作系统贡献者修补了websocket client。所以,我们必须对我们的socket.io-client npm包执行相同的操作,以便能够在套接字客户端使用finishClose方法。 Socket.io-client使用websocket库作为npm包,所以你必须找到这个文件(websocket.js)并用socket.io替换它。
之后,您可以使用finishClose方法确保连接已关闭,并且使用某些自定义服务器/客户端套接字设置,测试将正常运行。
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);
});
希望有人能帮忙。
这是断开客户端连接的正确方法,谢谢:) – ZiTAL 2012-06-02 17:13:58
对第二个问题的回答:没有工具:请参阅http://*.com/questions/5916066/node-js-tool-to-see-why-process-is-still-running – 2011-05-11 14:20:51