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