【发布时间】:2021-05-11 09:59:59
【问题描述】:
好的,所以断开连接的客户端由 PHP 中的 socket_select() 返回。但是如何检查客户端是否与 PHP 套接字断开连接而不产生 PHP 警告?
我发现的大多数线程都建议使用 socket_read() 如果客户端断开连接,它将返回 false。但这会产生以下警告:
PHP Warning: socket_read(): unable to read from socket [10053]:
我尝试了以下代码:
// ...
if (!$connections = $this->_connections) continue;
if (!socket_select($connections, $null, $null, 0, 100)) continue;
foreach ($connections as $connection) {
// check for incoming data
if ($buffer = socket_read($connection, 1024, PHP_NORMAL_READ)) {
// ...
} else if ($buffer === false) {
if ($i = array_search($connection, $this->_connections)) {
socket_shutdown($this->_connections[$i]);
socket_close($this->_connections[$i]);
unset($this->_connections[$i]);
}
}
// ...
我不认为用 @ 抑制警告是一个值得信赖的解决方案。
https://www.php.net/manual/en/ref.sockets.php
编辑:似乎我在客户端断开连接时从 socket_read() 接收到一些字节数据。我正在使用 Sec-WebSocket-Key 这可能是为什么?字符串(8) "]!^"
【问题讨论】: