重新连接到同一个Websocket

时间:2017-05-06 08:50:08

标签: javascript python websocket tornado

我有一个客户端 - 服务器游戏。服务器使用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。

当互联网出现故障时,我希望客户端尝试重新连接到同一个游戏,以便用户可以继续玩游戏。我尝试了StackOverflow的一些例子,但是他们创建了新的连接并开始游戏:

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

如何重新连接到同一个套接字? (对不起,如果条款不正确)

1 个答案:

答案 0 :(得分:2)

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