我有一个PHP套接字服务器,可以监听多个套接字 在我的客户端,如果我挂起机器,则不会向PHP服务器发送断开连接消息。如何确定哪个客户端仍然连接,或者是否有这些断开事件? 在PHP中,我使用socket_select来收听我的所有套接字。
谢谢!
答案 0 :(得分:1)
如果远程套接字已正确关闭,则套接字将变为可读,但接收呼叫将不返回任何数据。如果通信中出现错误,则下一个接收或发送操作将返回错误。
但是如果连接空闲,那么你将不知道另一端是否存在。您可以设置套接字选项(SO_KEEPALIVE
)以自动让系统发送“保持活动”消息并发现是否存在任何问题。 SO_KEEPALIVE
的问题是默认的时间是两个小时。如果您需要更短的时间(最有可能),那么最好的办法就是将自己的保持活动消息传递作为协议的一部分。
答案 1 :(得分:0)
如果出现错误,socket_read将返回false,如果没有数据则返回空字符串。 这些事情不会触发事件,你必须测试连接是否仍然存在。