客户代码:
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?
答案 0 :(得分:0)
客户端和服务器在连接处于活动状态时交换心跳消息。当服务器停止接收这些消息时,它将声明客户端已断开连接。客户端也可以明确断开连接。
你所经历的可能是第一种情况。客户端具有重试逻辑,因此每当连接断开时,它都会尝试重新连接。我不确定为什么会发生这种情况,您可能需要查看浏览器控制台中的网络选项卡,以查看请求/响应级别发生的情况。
答案 1 :(得分:0)
您确定client disconnected
和client connected
文本来自同一个套接字/连接吗?也许第一个来自之前的连接,它只是提供给你晚了一点关于新连接的信息?
尝试生成并向连接/套接字添加一些ID号,并将它们与信息消息一起输出到控制台。