[英]Node.js: socket.io close client connection
如何在客户端关闭套接字连接?
我在用:
即:调用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();
};
这会在客户端触发断开连接事件,但我仍然会得到两次或三次响应。
你试过了吗:
socket.disconnect()
在客户端?
对于socket.io版本1.4.5:
在服务器上:
socket.on('end', function (){
socket.disconnect(0);
});
在客户端:
var io = io();
io.emit('end');
在服务器端和/或浏览器端没有连接这样的东西。 只有一个连接。 如果其中一方将其关闭,则它将关闭(并且您无法将数据推送到明显关闭的连接)。
现在,当您离开页面时,浏览器会关闭连接(它不依赖于您在服务器端使用的库/语言/操作系统)。 对于WebSockets来说这至少是正确的(对于长轮询而言可能不是这样,因为keep-alive
但是很有keep-alive
socket.io正确地处理这个问题)。
如果出现这样的问题,那么我很确定你自己的代码中有一个错误(在服务器端)。 可能你正在堆叠一些你不应该的事件处理程序。
socket.disconnect()
仅重新启动客户端上的连接触发断开事件。 但再次联系起来。
socket.close()
断开与客户端的连接。 客户端将继续尝试连接。
socket.disconnect()
是socket.close()
的同义词,它手动断开套接字。
当您在客户端输入时:
const socket = io('http://localhost');
这将打开与autoConnect: true
的连接,因此当您从服务器断开套接字时,lib将尝试再次重新连接,以禁用autoConnection:
const socket = io('http://localhost', {autoConnect: false});
socket.open();// synonym to socket.connect()
如果您需要,可以手动重新连接:
socket.on('disconnect', () => {
socket.open();
});
我试图关闭版本1.0中的用户连接,并找到此方法:
socket.conn.close()
此方法与disconnect()之间的区别在于客户端将继续尝试重新连接到服务器。
试试这个来关闭连接:
socket.close();
如果你想再次打开它:
socket.connect();
只需通过从客户端发出任何事件,在服务器端尝试socket.disconnect(true)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.