我正在使用node.js和socket.io
进行HTML5游戏我决定将其托管在Heroku。
Heroku不允许使用WebSockets,所以我必须设置xhr-polling。 (Socket-io on Heroku)
io.configure( function() {
io.set( "transports", ["xhr-polling"] );
io.set( "polling duration", 10 );
} );
之前,我只使用网络套接字
io.set( "transports", ["websocket"] );
现在,当客户端断开连接(关闭窗口或刷新页面)时,服务器上的“断开连接”事件不会立即触发(看起来它正在等待客户端心跳超时)。
client.on( "disconnect", onClientDisconnect );
如果客户端重新加载,我会在解除断开连接之前获得多个连接事件。 我的问题在这里。
您有什么想法,为什么xhr-polling不会触发断开事件? 这是socket.io的错误配置吗?
感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
只需配置会话身份验证,您就可以随时了解客户端已连接的内容。 E.g。
io.set('authorization', function(handshakeData, ack) {
var cookies = require(...);
var signedCookies = parseCookies(cookies, secret);
sessionStore.get(signedCookies['connect.sid'], function(err, sessionData) {
handshakeData.session = sessionData || {};
handshakeData.sid = signedCookies['connect.sid'] || null;
ack(err, err ? false : true);
});
});