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



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

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

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

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

如果无法实时了解,那么在不通过这种方式进行双重检查的情况下,就无法发送重要数据。

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

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

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

如果连接被"干净地"关闭(如果客户端使用shutdown()并在关闭前等待了一段时间),则G-WAN将在servlet之前知道连接的状态,否则,G-WAN将仅在发送回复时(或在读/写超时后)知道。

为了帮助解决这个问题所描述的那种情况,几周前为Websockets的工作人员添加了一个名为BEFORE_CLOSE的新状态。

相关内容

  • 没有找到相关文章

最新更新