重新连接到同一个 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 时)。
我有一个客户端-服务器游戏。服务器位于 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 时)。