-1

服务器如何知道客户端连接丢失?这会触发事件吗?这是否可以存储代码(服务器端),以便它可以在连接丢失发生之前执行?

在以下情况下可能会发生这种连接丢失:

  • 闲置太久。
  • 客户端终止。

等等

这是我特别要求 Jsp 和 php 的。

4

4 回答 4

3

这取决于您正在谈论的协议,但“连接”通常是通过三次握手建立的,这会导致双方简单地同意他们现在已“连接”。这意味着双方都在一个表中记住在端口x上有一个到 IP abcd的开放连接,以及这个“连接”与什么上下文相关联。然后将来自该“连接”的所有传入数据传递到关联的上下文。

仅此而已,没有真正的“物理”联系;这只是两方之间商定的状态。

根据协议,可以使用适当的数据包正式终止连接。一方将此数据包发送给另一方,告诉它“连接”已终止;双方都删除了表格条目,就是这样。

如果在没有发送此数据包的情况下中断连接,则任何一方都不会知道。只有下一次一方试图向另一方发送数据时,这个问题才会变得明显。

根据协议,如果在一定时间内没有接收到数据,则连接可能会自动被视为陈旧并终止。在这种情况下,会更快地发现死连接,但需要双方之间不断地来回切换。

所以简而言之:是的,有一个服务器事件可以触发,但不保证会触发。

于 2013-03-29T10:46:00.373 回答
2

当您关闭一个套接字时,会通知另一端的套接字。但是,如果连接丢失不正常(例如,网络电缆被拔掉,或者计算机断电),那么您可能不会发现。

为了解决这个问题,您可以发送定期消息来检查连接。如果发送失败,则连接已中断。不过,请确保您将套接字设置为仅等待一段合理的时间。

于 2013-03-29T10:37:14.537 回答
0

如果您谈论的是典型的客户端服务器架构,则服务器不应该为与客户端的连接而烦恼。只有客户端应该关心与服务器的连接。客户端应采取措施避免连接被断开,例如定期发送保持活动消息或类似消息以避免超时。

于 2013-03-29T10:37:23.023 回答
0

为什么服务器需要担心连接丢失/终止。

服务器的工作是为来自客户端的请求提供服务。就是这样。如果客户端没有从服务器接收到它期望的数据,那么它可以采取适当的措施。如果在服务器为向客户端提供数据而进行一些处理时连接断开;那么服务器也不能做太多的http请求是由客户端发起的。

因此,如果由于某种原因没有得到响应,客户端可以发出新请求。

于 2013-03-29T10:37:25.620 回答