0
我檢查了stream3.c
的例子,發現當我關閉瀏覽器中的頁面時,servlet,即stream3.c
,仍然運行了大約2輪,然後終止。如何知道客戶端是否已關閉連接?
這意味着,最後2輪的數據丟失了。
誰可以解釋如何在發送數據前確認連接狀態?
顯然,金桂冠知道連接狀態,否則將不終止stream3.c
,但金桂冠可能不知道它的實時性。
如果沒有辦法實時知道它,重要數據不能通過這種方式進行雙重檢查發送。
我檢查了stream3.c
的例子,發現當我關閉瀏覽器中的頁面時,servlet,即stream3.c
,仍然運行了大約2輪,然後終止。如何知道客戶端是否已關閉連接?
這意味着,最後2輪的數據丟失了。
誰可以解釋如何在發送數據前確認連接狀態?
顯然,金桂冠知道連接狀態,否則將不終止stream3.c
,但金桂冠可能不知道它的實時性。
如果沒有辦法實時知道它,重要數據不能通過這種方式進行雙重檢查發送。
如何在發送數據前確認連接狀態?
唯一可靠的方法是嘗試發送數據到客戶端套接字。如果連接已關閉,則通話將失敗。
如果插座已經被回收(再由另一新的連接),那麼SESSION_ID
(和possily客戶端IP地址)會有所不同。
如果連接「乾淨」關閉(如果客戶端使用shutdown()
,等待結賬前位),那麼G-WAN會知道有關servlet之前的連接狀態,否則,G-WAN就知道只有在發送回覆時(或在讀/寫超時之後)。
爲了解決這個問題所描述的這種情況,幾個星期前,一個名爲BEFORE_CLOSE
的新狀態被添加到了Websockets的工作人員身上。