我的代码:
客户端:
var io=socketIo.listen(server,{'log level': 2,'pingTimeout':300000,'pingInterval':1000});
服务端:
var socket =io.connect('http://*********:3000',{'timeout': 300000,
'reconnection': true,'reconnectionDelayMax':30000,'reconnectionDelay':1000});
我测试的逻辑: 首先禁掉一台测试机的网卡,3分钟后开启网卡,客户端重连成功,客户端触发"socket.on(‘reconnect’,function(){}"事件,服务端触发"io.on(‘connection’,function(socket){}"事件,之后服务端触发"socket.on(‘disconnect’,function(){}"事件(这次是把重连前的那个 socket断开了),
Connect..............1IpvXYapXibm0NzlAAAD
Connect..............uPlVSHeeZkOHt-8uAAAE
userList---2
1IpvXYapXibm0NzlAAAD---User4:disconnect.....
上面的日志可以看出:连进去2次,第一次 Connect是第一次进入,第二次是重连触发的Connect,之后把原来的socket断开了,disconnect是断开的第一次的socket,socket.id一样;
问题:难道是socket.io的重连机制是:先开个新的socket接连,再断开旧连接?而不是维护原来那个连接?
看看源码就晓得了,不是很长 可以用用engine.io,只实现了最基本的功能,其余功能想要的自己封装,比较方便简单 http://www.amoa400.com/p/analysis-engine.io
我自己找到了官方的解释: On a reconnection now instead of ‘reconnect’ another ‘connect’ event is fired instead.