有人知道为什么我的套接字连接在使用xhr-polling时没有关闭吗?这是我想要执行的服务器代码,但在使用xhr-polling时不会触发。套接字连接工作正常(我在varnish后面运行,因为这是一个安全套接字)。我尝试在浏览器卸载时手动发出一个disconnect事件,但这对我来说不是一个最佳的解决方案。
client.on('disconnect', function () {
delete connected_clients[id];
console.log(' debug - ' + 'client ' + client.id + 'is disconnected');
console.log(' debug - ' + 'total number of connected clients is ' + Object.keys(connected_clients).length);
});在我的客户端代码中,我像这样连接套接字:
socket = io.connect(BASE_URL, {
"sync disconnect on unload":true
});我的服务器端设置如下:
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.enable('browser client gzip'); // gzip the file
io.set('log level', 3); // reduce logging
io.set('match origin protocol', true); // ssl support
io.set('sync disconnect on unload', true);
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'xhr-polling',
'websocket',
'flashsocket',
'htmlfile',
'jsonp-polling'
]); 这是客户端退出浏览器时收到的调试消息
debug: xhr-polling closed due to exceeded duration我使用的是带有节点0.8.8的socket.io版本0.9.10。
发布于 2013-11-04 18:20:21
由于连接是在您(服务器)和客户端(浏览器)之间进行的,因此在连接关闭时是否会收到通知,由浏览器决定。如果浏览器没有通知您它认为连接已关闭,则无法通知您。
我建议您以一种善待服务器的方式对您的客户端进行编程,在适当地丢弃连接时通知它。在连接被忽略而没有通知的情况下,您只需在一段时间不活动(超时)后关闭连接。
可以把它想象成一个场景,当你给一个朋友发即时消息时。您的朋友可能会好心地通知您,他们即将离开办公桌,不再能够参与对话(断开连接),或者他们也可以在没有通知的情况下离开办公桌(终止浏览器进程),或者更糟糕的是,他们可能有心脏病发作,这将使他们无法参加(停电)。一段时间后,您就会明白他们不再积极参与会话(超时)。
我很抱歉,这里没有魔法。您必须对您的服务器进行编程,以处理它可能正在与断开连接的客户端对话这一事实。
https://stackoverflow.com/questions/13000872
复制相似问题