baa*_*aam 42 javascript node.js express 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
});
});
Run Code Online (Sandbox Code Playgroud)
- 客户端
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
});
Run Code Online (Sandbox Code Playgroud)
如果我加载测试页面,我需要来自服务器的一些值(getInitData).
在第一页访问我获取数据一次,在重新加载或第二次访问我得到它两次,依此类推.
服务器端的连接在页面重新加载时自动关闭,如果您离开页面.
但在客户端,连接仍然是开放的.
如何在客户端关闭连接或检查是否已打开连接?
更新
我现在尝试以下内容:(客户端)
window.onbeforeunload = function(e) {
socket.disconnect();
};
Run Code Online (Sandbox Code Playgroud)
这会在客户端触发断开连接事件,但我仍然会得到两次或三次响应.
Mil*_*kov 68
你试过了吗:
socket.disconnect()
Run Code Online (Sandbox Code Playgroud)
在客户端?
Him*_*wal 19
对于socket.io版本1.4.5:
在服务器上:
socket.on('end', function (){
socket.disconnect(0);
});
Run Code Online (Sandbox Code Playgroud)
在客户端:
var io = io();
io.emit('end');
Run Code Online (Sandbox Code Playgroud)
fre*_*ish 11
在服务器端和/或浏览器端没有连接这样的东西.只有一个连接.如果其中一方将其关闭,则它将关闭(并且您无法将数据推送到明显关闭的连接).
现在,当您离开页面时,浏览器会关闭连接(它不依赖于您在服务器端使用的库/语言/操作系统).对于WebSockets来说至少也是如此(对于长轮询而言可能不是这样,因为keep-alive但是很有希望socket.io正确地处理这个问题).
如果出现这样的问题,那么我很确定你自己的代码中有一个错误(在服务器端).可能你正在堆叠一些你不应该的事件处理程序.
socket.disconnect()
Run Code Online (Sandbox Code Playgroud)
仅重新启动客户端上的连接触发断开事件.但再次联系起来.
socket.close()
Run Code Online (Sandbox Code Playgroud)
断开与客户端的连接.客户端将继续尝试连接.
socket.disconnect()socket.close()是手动断开套接字的同义词。
当您在客户端输入:
const socket = io('http://localhost');
Run Code Online (Sandbox Code Playgroud)
这将打开一个连接autoConnect: true,因此当您从服务器断开套接字时,库将尝试再次重新连接,以禁用自动连接:
const socket = io('http://localhost', {autoConnect: false});
socket.open();// synonym to socket.connect()
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以手动重新连接:
socket.on('disconnect', () => {
socket.open();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91185 次 |
| 最近记录: |