服务器如何知道客户端连接丢失?这会触发事件吗?这是否可以存储代码(服务器端),以便它可以在连接丢失发生之前执行?
在以下情况下可能会发生这种连接丢失:
- 闲置太久。
- 客户端终止。
等等
这是我特别要求 Jsp 和 php 的。
这取决于您正在谈论的协议,但“连接”通常是通过三次握手建立的,这会导致双方简单地同意他们现在已“连接”。这意味着双方都在一个表中记住在端口x上有一个到 IP abcd的开放连接,以及这个“连接”与什么上下文相关联。然后将来自该“连接”的所有传入数据传递到关联的上下文。
仅此而已,没有真正的“物理”联系;这只是两方之间商定的状态。
根据协议,可以使用适当的数据包正式终止连接。一方将此数据包发送给另一方,告诉它“连接”已终止;双方都删除了表格条目,就是这样。
如果在没有发送此数据包的情况下中断连接,则任何一方都不会知道。只有下一次一方试图向另一方发送数据时,这个问题才会变得明显。
根据协议,如果在一定时间内没有接收到数据,则连接可能会自动被视为陈旧并终止。在这种情况下,会更快地发现死连接,但需要双方之间不断地来回切换。
所以简而言之:是的,有一个服务器事件可以触发,但不保证会触发。
当您关闭一个套接字时,会通知另一端的套接字。但是,如果连接丢失不正常(例如,网络电缆被拔掉,或者计算机断电),那么您可能不会发现。
为了解决这个问题,您可以发送定期消息来检查连接。如果发送失败,则连接已中断。不过,请确保您将套接字设置为仅等待一段合理的时间。
如果您谈论的是典型的客户端服务器架构,则服务器不应该为与客户端的连接而烦恼。只有客户端应该关心与服务器的连接。客户端应采取措施避免连接被断开,例如定期发送保持活动消息或类似消息以避免超时。
为什么服务器需要担心连接丢失/终止。
服务器的工作是为来自客户端的请求提供服务。就是这样。如果客户端没有从服务器接收到它期望的数据,那么它可以采取适当的措施。如果在服务器为向客户端提供数据而进行一些处理时连接断开;那么服务器也不能做太多的http请求是由客户端发起的。
因此,如果由于某种原因没有得到响应,客户端可以发出新请求。