2

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

我决定将它托管在Heroku上。

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

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 的错误配置吗?

谢谢。

4

2 回答 2

1

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

尝试降低心跳。它可能会解决您的问题。另一方面,appfog 似乎支持 websockets。

于 2013-01-05T05:45:59.513 回答
0

只需配置会话身份验证,您就可以随时知道连接了哪些客户端。例如

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);
    });
});
于 2013-01-05T06:14:42.217 回答