0

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

也就是说,最后两轮的数据丢失了。

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

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

如果没有办法实时知道,那么重要的数据就不能通过这种方式不经过双重检查就发送出去。

4

1 回答 1

0

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

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

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

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

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

于 2013-06-30T17:29:06.583 回答