我正在尝试使用LearnBoost's socket.io和node-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);
});
编辑:将WebSocket的变量名称更改为ws
以避免混淆
答案 0 :(得分:5)
var socket = io.listen(server);
您已在端口上创建了套接字。你从来没有关闭它。
socket.server.close()
关闭你的(socket.io)套接字。
如有疑问,请阅读socket.io
github examples
socket.server === server
这是您传入的服务器,在liste语句中,因此它已关闭。我不确定它在等什么。
答案 1 :(得分:2)
下面是一种关闭所有连接并能够运行多个expresso测试的方法(使用socket.io和socket.io-client)。
解决方案很棘手且有问题但是在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);
});
希望,有人可以提供帮助。
答案 2 :(得分:0)
程序正在等待,因为socket.io(服务器)仍在侦听传入连接。我不知道有什么方法可以停止听。