重新连接到同一个 Websocket

Reconnect to the same Websocket

我有一个客户端-服务器游戏。服务器位于 Python 并使用 Tornado:

main.py
app = web.Application([
    (r'/ws', Game),
])

if __name__ == '__main__':
    app.listen(config['port'])
    ioloop.IOLoop.instance().start()
...


game.py
class Game(websocket.WebSocketHandler):
...

客户使用 JavaScript。

当 Internet 出现故障时,我希望客户端尝试重新连接到同一游戏,以便用户可以继续玩。我尝试了 Whosebug 中的一些示例,但它们创建了新的连接并且游戏重新开始:

function startSocket() {
    ws = new WebSocket('ws://' + window.tornado.host + ':' + window.tornado.port + '/ws');
    ws.onopen = onSocketOpen;
    ws.onmessage = onSocketMessage;

    ws.onclose = function(event) {
        checkSocket();
    };  

    setInterval(checkSocket, 5000);
}

function checkSocket() {
    if (!ws || ws.readyState === WebSocket.CLOSED) {
        startSocket();
    }
}

如何重新连接到同一个套接字? (抱歉,如果术语不正确)

您的问题不在于连接,而在于保留现有的游戏状态。只需在游戏开始时将生成的标识符发送给客户端,客户端稍后可以在重新连接时使用它来请求现有状态。此 id 可以在 URL 中发送,也可以在成功连接时使用套接字发送。在此之后,服务器将知道要发回什么数据。服务器将发送现有数据(当收到 id 时)或创建新游戏(当客户端没有发送 id 时)。