Javascript Websockets 在页面卸载时断开连接
Javascript Websockets Disconnect on Page Unload
我正在使用 python flask 和网络技术构建在线游戏,这些技术使用网络套接字让游戏 运行 上线。游戏的一页是大厅,上面显示了所有当前玩家。如果用户断开游戏连接,他们当然应该从大厅列表中删除。
我想,为了让用户迅速从列表中消失,客户端的浏览器需要手动发送断开连接执行 socket.disconnect()
或者在页面卸载时发送另一个自定义事件。
不幸的是,我似乎无法使用 onunload
事件将此设置为 运行 - 它 运行 在页面加载时,而不是在您离开页面时。我也找不到使用 onbeforeunload
事件的方法,因为我已经在使用它来显示确认弹出窗口。
如有任何建议,我们将不胜感激!提前致谢!
我的客户端代码:
window.addEventListener("beforeunload", function(event) {if (!intentionalForward) {event.preventDefault(); event.returnValue = " "}});
window.addEventListener("unload", function () { socket.emit("test","testing unload event"); });
发生的事情是,您调用 socket.emit
并将该调用的结果作为事件侦听器分配给 unload
事件。您应该使用这样的闭包函数:
window.addEventListener("unload", function() { socket.emit("test","testing unload event"); });
我通过强制客户端使用 websocket 传输进行连接(通过将 {transports: ["websocket"]}
标志添加到我的 io.connect
函数)设法使其正常工作。这意味着断开连接事件现在在服务器上有效。
N.B。从这一点开始,我被要求安装和使用 gunicorn,因为 flask 开发服务器不支持 websockets。
我正在使用 python flask 和网络技术构建在线游戏,这些技术使用网络套接字让游戏 运行 上线。游戏的一页是大厅,上面显示了所有当前玩家。如果用户断开游戏连接,他们当然应该从大厅列表中删除。
我想,为了让用户迅速从列表中消失,客户端的浏览器需要手动发送断开连接执行 socket.disconnect()
或者在页面卸载时发送另一个自定义事件。
不幸的是,我似乎无法使用 onunload
事件将此设置为 运行 - 它 运行 在页面加载时,而不是在您离开页面时。我也找不到使用 onbeforeunload
事件的方法,因为我已经在使用它来显示确认弹出窗口。
如有任何建议,我们将不胜感激!提前致谢!
我的客户端代码:
window.addEventListener("beforeunload", function(event) {if (!intentionalForward) {event.preventDefault(); event.returnValue = " "}});
window.addEventListener("unload", function () { socket.emit("test","testing unload event"); });
发生的事情是,您调用 socket.emit
并将该调用的结果作为事件侦听器分配给 unload
事件。您应该使用这样的闭包函数:
window.addEventListener("unload", function() { socket.emit("test","testing unload event"); });
我通过强制客户端使用 websocket 传输进行连接(通过将 {transports: ["websocket"]}
标志添加到我的 io.connect
函数)设法使其正常工作。这意味着断开连接事件现在在服务器上有效。
N.B。从这一点开始,我被要求安装和使用 gunicorn,因为 flask 开发服务器不支持 websockets。