如何知道客户端是否已关闭连接?

时间:2013-06-29 15:21:55

标签: connection state g-wan

我查看了stream3.c示例,发现当我在浏览器中关闭页面时,servlet(即stream3.c)仍在运行大约2轮然后终止。

这意味着,最后两轮的数据丢失了。

谁可以解释在发送数据之前如何确认连接状态?

显然,gwan知道连接状态,否则它不会终止stream3.c,但gwan可能不会实时知道它。

如果无法实时了解,如果没有通过这种方式进行双重检查,就无法发送重要数据。

1 个答案:

答案 0 :(得分:0)

  

如何在发送数据前确认连接状态?

唯一可行的方法是尝试在客户端套接字上发送数据。如果连接已关闭,则呼叫将失败。

如果套接字已被回收(由另一个新连接重用),则SESSION_ID(可能是客户端IP地址)将不同。

如果连接“干净地”关闭(如果客户端使用shutdown()并在关闭前等待一点),那么G-WAN将知道servlet之前的连接状态否则,G-WAN只会在发送回复时(或在读/写超时后)知道。

为了帮助解决这个问题所描述的案例,几周前就为Websockets工作的人添加了一个名为BEFORE_CLOSE的新状态。