简单场景:
- 客户端使用socket.io连接到服务器(
socket = io.connect(...)
) - 服务器崩溃
- 客户端尝试重新连接
- 用户要求客户端断开连接(
socket.disconnect()
) - 服务器启动
- 客户端重新连接
看起来一旦 socket.io 开始尝试重新连接,就不能再停止。我希望步骤4可以阻止步骤6的发生,但它无法阻止。我需要调用什么方法?
简单场景:
socket = io.connect(...)
)socket.disconnect()
)看起来一旦 socket.io 开始尝试重新连接,就不能再停止。我希望步骤4可以阻止步骤6的发生,但它无法阻止。我需要调用什么方法?
您可能想要自己处理重新连接。
// Disables the automatic reconnection
var socket = io.connect('http://server.com', {
reconnection: false
});
// Reconnects on disconnection
socket.on('disconnect', function(){
socket.connect(callback);
});
注意:旧版本使用reconnect
而不是reconnection
。
socket.io
的client
,使其不进行reconnect
,只需将reconnect
属性设置为false
。server.js
)来测试这个功能。var io = require('socket.io').listen(8888);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
test.js
文件来测试它是否不会重新连接。var client = require('socket.io-client'),
socket = client.connect('http://localhost:8888', {
'reconnect': false
});
socket.on('connect', function () {
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
});
test.js
正常工作,您需要从 npm
安装 socket.io-client
,可以通过执行 npm install socket.io-client
或将 (dev-)dependency
socket.io-client
添加到您的 package.json
中。server.js
时,test.js
正在运行,test.js
将立即返回,这是您期望的结果。当我将 reconnect
设置为 true
时,客户端将尝试重新连接到服务器,这不是期望的行为。self.socket?.manager?.reconnects = false
我的简单解决方案是,为了避免全局使用套接字选项而仅在需要时避免重新连接,我在disconnect
事件上调用disconnect()
方法:
socket.on('disconnect', (reason) => {
socket.disconnect();
socket = null;
});
对我来说,这个很好用,尽管在完全停止之前会多尝试一次。
"socket.io-client": "2.2.0"
this.socket.io.reconnectionAttempts(0);
var manager = io.Manager('http://localhost:9823', { autoConnect: false });
这里是博客链接。
你可以直接调用socket.disconnect()
,这样它就会停止尝试重新连接。
reconnection: false
链接。 - drodsou