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。