触发断开事件之前,Socket.io需要很长时间

我正在使用node.js和socket.io来做HTML5游戏

我决定把它放在Heroku上 。

Heroku不允许使用WebSocket,所以我必须设置xhr-polling。 ( Heroku上的Socket-io )

io.configure( function() { io.set( "transports", ["xhr-polling"] ); io.set( "polling duration", 10 ); } ); 

之前,我只使用networking套接字

 io.set( "transports", ["websocket"] ); 

现在,当一个客户端断开(closures他的窗口或刷新他的页面)时,事件“disconnect”不会立即在服务器上触发(看起来它正在等待客户端心跳超时)。

 client.on( "disconnect", onClientDisconnect ); 

如果客户端重新加载,我会断开连接之前获得多个连接事件。 我的问题在这里。

你有什么想法,为什么xhr-polling不会触发断开事件? 这是一个错误的socket.ioconfiguration?

谢谢。

它在这里说,你可以configuration心跳。 要正确configuration它,您必须在服务器和客户端(在此给出)调整心跳。

尝试降低心跳。 这可能会解决你的问题。 另外,appfog似乎支持websocket。

只要configuration会话身份validation,你就可以知道客户端连接了什么。 例如

 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); }); });