Node.js Socket.io错误:连接后触发disconnect事件

时间:2016-05-23 08:04:08

标签: 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?

2 个答案:

答案 0 :(得分:0)

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

你所经历的可能是第一种情况。客户端具有重试逻辑,因此每当连接断开时,它都会尝试重新连接。我不确定为什么会发生这种情况,您可能需要查看浏览器控制台中的网络选项卡,以查看请求/响应级别发生的情况。

REF: https://github.com/socketio/socket.io/issues/1910

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

答案 1 :(得分:0)

您确定client disconnectedclient connected文本来自同一个套接字/连接吗?也许第一个来自之前的连接,它只是提供给你晚了一点关于新连接的信息?

尝试生成并向连接/套接字添加一些ID号,并将它们与信息消息一起输出到控制台。