javascript - Node.js Socket.io 错误 : disconnect event is triggered after connect

标签 javascript node.js sockets express socket.io

  • 在服务器上,断开连接事件在网络连接后触发 掉线,客户端重新连接。

客户端代码:

var url ='192.168.1.101', port = '80',
    socket = io.connect('http://' + url + ':' + port, {
    'reconnect': true,
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax: 5000,
    timeout: 1000
});

//重连事件

socket.on('reconnect', function (nr) {
    console.log('reconnected, nr: ', nr);
});

//连接事件

socket.on('connect', function () {
    console.log('connected');
});

//断开事件

socket.on('disconnect', function () {
    console.log('disconnected');
});

服务器代码:

'use strict';
var fs = require('fs'),
    express = require('express'),
    app = express(),
    io = require('socket.io'),
    server = require('http').createServer(app),
    compress = require('compression'),
    socket;

app.use(compress({level: 9}));

server.listen(port, url);
socket = io.listen(server, {'pingTimeout': 1000, 'pingInterval': 3000});

socket.on('connection', function (client) {
    console.log('client connected');

    client.on('disconnect', function () {
        console.log('client disconnected');
    });
});
        
- Result on server if client reconnects:

> client connected
> client disconnected

Can someone explain to me why this is happening?

最佳答案

客户端和服务器在连接处于事件状态时交换心跳消息。当服务器停止接收这些消息时,它将声明客户端已断开连接。客户端也可以显式断开连接。

您遇到的可能是第一种情况。客户端有一个重试逻辑,所以只要连接断开,它就会尝试重新连接。我不确定为什么会发生这种情况,您可能想查看浏览器控制台中的网络选项卡,了解在请求/响应级别发生了什么。

引用: https://github.com/socketio/socket.io/issues/1910

https://github.com/miguelgrinberg/Flask-SocketIO/issues/116

关于javascript - Node.js Socket.io 错误 : disconnect event is triggered after connect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385682/

相关文章:

node.js - 使用套接字IO的WebRTC RTCMultiConnection

javascript - Scala.js CSS 依赖项

javascript - 使用 Canvas 从页面抓取像素数据

javascript - php:从文件夹中的图片创建数组并交替显示它们?

node.js - 如何在 Telegraf 中处理 contactRequest

c - Recv() 不在单独的线程中工作,C 套接字编程

javascript - 使用 javascript 或 jquery 在 dom 中插入元素

node.js - 无法安装 ionic 框架

node.js - 在生产系统上使用 node SDK 处理 paypal 支付时出现 401 invalid_client

c++ - Thrift - 每个套接字都有不同的 Handler 实例