我查看了stream3.c
示例,发现当我在浏览器中关闭页面时,servlet(即stream3.c
)仍在运行大约2轮然后终止。
这意味着,最后两轮的数据丢失了。
谁可以解释在发送数据之前如何确认连接状态?
显然,gwan知道连接状态,否则它不会终止stream3.c
,但gwan可能不会实时知道它。
如果无法实时了解,如果没有通过这种方式进行双重检查,就无法发送重要数据。
答案 0 :(得分:0)
如何在发送数据前确认连接状态?
唯一可行的方法是尝试在客户端套接字上发送数据。如果连接已关闭,则呼叫将失败。
如果套接字已被回收(由另一个新连接重用),则SESSION_ID
(可能是客户端IP地址)将不同。
如果连接“干净地”关闭(如果客户端使用shutdown()
并在关闭前等待一点),那么G-WAN将知道servlet之前的连接状态否则,G-WAN只会在发送回复时(或在读/写超时后)知道。
为了帮助解决这个问题所描述的案例,几周前就为Websockets工作的人添加了一个名为BEFORE_CLOSE
的新状态。