Node.js:socket.io关闭客户端连接
如何关闭客户端的套接字连接?
我在用:
即:调用localhost/test
- 服务器端
var test = io
.of('/test')
.on('connection', function (socket) {
console.log('open socket: ' + socket);
socket.on('disconnect', function () {
console.log('disconnected event');
//socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side
//socket.disconnect(); --> same here
});
});
- 客户端
var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function () {
console.log('disconnect client event....');
});
socket.emit('getInitData', function (data) {
.. do something with data
});
如果我加载测试页面,我需要一些来自服务器的值(getInitData)。
在第一页访问我得到的数据一次,在重新加载或第二次访问我得到它两次,等等。
服务器端的连接在页面重新加载和离开页面时自动关闭。
但在客户端,连接仍处于打开状态。
如何关闭客户端的连接或检查是否已经有打开的连接?
UPDATE
我现在尝试了以下内容:(客户端)
window.onbeforeunload = function(e) {
socket.disconnect();
};
这会在客户端触发断开连接事件,但我仍然得到两次或三次响应。
服务器端和/或浏览器端没有连接。 只有一个连接。 如果其中一方关闭它,那么它将被关闭(并且不能将数据推送到明显关闭的连接)。
现在浏览器在你离开页面时关闭连接(它不依赖于你在服务器端使用的库/语言/操作系统)。 这对于WebSockets来说至少是正确的(对于长时间轮询来说,这可能不是真的,因为keep-alive
但是keep-alive
socket.io能正确处理这个问题)。
如果发生这样的问题,那么我很确定你自己的代码中存在一个错误(在服务器端)。 可能你正在堆叠一些事件处理程序,你不应该这样做。
你试过了吗:
socket.disconnect()
在客户端?
对于socket.io版本1.4.5:
在服务器上:
socket.on('end', function (){
socket.disconnect(0);
});
在客户端:
var io = io();
io.emit('end');
链接地址: http://www.djcxy.com/p/63177.html