簡體   English   中英

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 傳輸進行連接(通過向我的io.connect函數添加{transports: ["websocket"]} io.connect {transports: ["websocket"]}標志)來io.connect正常工作。 這意味着斷開連接事件現在可以在服務器上運行。

注意,從這一點開始,我需要安裝和使用 gunicorn,因為 Flask 開發服務器不支持 websockets。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM