2013-06-29 210 views
0

我檢查了stream3.c的例子,發現當我關閉瀏覽器中的頁面時,servlet,即stream3.c,仍然運行了大約2輪,然後終止。如何知道客戶端是否已關閉連接?

這意味着,最後2輪的數據丟失了。

誰可以解釋如何在發送數據前確認連接狀態?

顯然,金桂冠知道連接狀態,否則將不終止stream3.c,但金桂冠可能不知道它的實時性。

如果沒有辦法實時知道它,重要數據不能通過這種方式進行雙重檢查發送。

回答

0

如何在發送數據前確認連接狀態?

唯一可靠的方法是嘗試發送數據到客戶端套接字。如果連接已關閉,則通話將失敗。

如果插座已經被回收(再由另一新的連接),那麼SESSION_ID(和possily客戶端IP地址)會有所不同。

如果連接「乾淨」關閉(如果客戶端使用shutdown(),等待結賬前位),那麼G-WAN會知道有關servlet之前的連接狀態,否則,G-WAN就知道只有在發送回覆時(或在讀/寫超時之後)。

爲了解決這個問題所描述的這種情況,幾個星期前,一個名爲BEFORE_CLOSE的新狀態被添加到了Websockets的工作人員身上。

相關問題