关于javascript:Socket.io需要很长时间才能触发断开连接事件

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