我有一个监听多个套接字的 PHP 套接字服务器。
在我的客户端上,如果我暂停机器,则不会向 PHP 服务器发送断开连接消息。如何确定哪个客户端仍然连接或未连接,或获取这些断开连接事件?
在 PHP 中,我使用 socket_select 来监听我所有的套接字。
谢谢 !
我有一个监听多个套接字的 PHP 套接字服务器。
在我的客户端上,如果我暂停机器,则不会向 PHP 服务器发送断开连接消息。如何确定哪个客户端仍然连接或未连接,或获取这些断开连接事件?
在 PHP 中,我使用 socket_select 来监听我所有的套接字。
谢谢 !
如果远程套接字正确关闭,那么您的套接字将变得可读,但接收调用将不返回任何数据。如果通信出现错误,下一次接收或发送操作将返回错误。
但是,如果连接只是空闲,那么您将不知道另一端是否还活着。您可以设置一个套接字选项 ( SO_KEEPALIVE
) 来自动让系统发送“keep-alive”消息并发现是否有任何问题。问题SO_KEEPALIVE
在于默认时间是两个小时。如果您需要更短的时间(您很可能会这样做),那么您最好的选择是将您自己的保持活动消息作为协议的一部分实现。
如果有错误,socket_read 将返回 false,如果没有数据,则返回空字符串。这些东西不会触发事件,你必须测试连接是否仍然存在。