我的代码:
服务端:var io=socketIo.listen(server,{'log level': 2,'pingTimeout':30000,'pingInterval':1000});
zqm: pingInterval pingTimeout 两个参数的意思是
客户端链接到服务端获取到这两个参数。 客户端获取到参数,来进行执行发包规律。第一个参数ping超时时间。第二个参数是每隔1s发送一个包。
服务端也给客户端发送,客户端也给服务端发送。 如果服务端接受不到客户端发送的包,则超时把客户端断开。
所以服务端触发disconnect的时间= 手机啥时候开始不发包+ pingTimeout
对于安卓手机。 后台运行定时发送心跳包,有的手机后台运行60s内可以发送,超过60s就不会发送成功。 60s后 服务端如果接受不到客户端发送的包超过60s 则会触发服务端的disconnect机制。
有的安卓手机后台运行的时间可以很长。 时刻在发送数据包。 对于直播,则需要加个定时器50s时把直播关闭。
客户端:
var socket =io.connect('http://*********:3000',{'timeout': 300000, 'reconnection': true,'reconnectionDelayMax':30000,'reconnectionDelay':1000});
zqm:
reconnection 是客户端断开,是不是自动重连 。
reconnectionDelayMax 重连的间隔时间。reconnectionDelay 重连的时间。
var socketio = require('socket.io'), http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-type': 'text/html' }); res.end(); }).listen(19967, function() { console.log('服务开启19967'); }); var io = socketio.listen(server,{ pingTimeout: 20000, pingInterval: 1000 }); io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); console.log('connection') socket.on('day', function (data) { console.log(data); }); // 客户端一离开就会触发 socket.on('disconnect', function () { console.log('disconnect2') }); });
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <button id="button1" onclick="send()">按钮1</button> <script src="./socket.io-1.4.5.js"></script> <script> //var socket = io.connect('http://localhost:7110/?uip=%3A%3Affff%3A127.0.0.1',{ /* var socket = io.connect('http://192.168.1.134:19967',{ reconnection: false, transports: ['websocket'] });*/ var socket = io.connect('http://192.168.1.134:19967',{'timeout': 20000, 'reconnection': true,'reconnectionDelayMax':10000,'reconnectionDelay':1000}); socket.on('con', function (data) { console.log("news"); console.log(data); }); socket.on('socket.ip', function (data) { console.log("socket.ip"); console.log(data); socket.emit('my other event', { my: 'data' }); }); socket.on('news', function (data) { console.log("news"); console.log(data); }); socket.on('disconnect', function (data) { console.log("disconnect"); console.log(data); }); function send() { socket.emit('day', { my: 'data' }); console.log("点击"); } </script> </body> </html>