Socket.io takes a long time before triggering the disconnect event
我正在使用node.js和socket.io进行HTML5游戏
我决定将其托管在Heroku上。
Heroku不允许使用WebSocket,因此我必须设置xhr-polling。 (Heroku上的Socket-io)
1 2 3 4 | io.configure( function() { io.set("transports", ["xhr-polling"] ); io.set("polling duration", 10 ); } ); |
以前,我只使用网络套接字
1 | io.set("transports", ["websocket"] ); |
现在,当客户端断开连接(关闭其窗口或刷新其页面)时,"断开连接"事件不会立即在服务器上触发(看起来它正在等待客户端心跳超时)。
1 | client.on("disconnect", onClientDisconnect ); |
如果客户端重新加载,则在触发断开连接之前会收到多个连接事件。
我的问题在这里。
您有什么主意,为什么xhr-polling不会触发断开事件?
这是socket.io的错误配置吗?
谢谢。
它在这里说您可以配置心跳。 要正确配置它,必须在服务器和客户端上都调整心跳(在此处给出)。
尝试降低心跳。 它可以解决您的问题。
另一方面,appfog似乎支持websockets。
只需配置会话身份验证,您就可以始终知道连接了哪个客户端。 例如。
1 2 3 4 5 6 7 8 9 | 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); }); }); |