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