PHP socket_read 等待数据读取

Posted

技术标签:

【中文标题】PHP socket_read 等待数据读取【英文标题】:PHP socket_read waits for data to read 【发布时间】:2021-03-19 22:46:23 【问题描述】:

我是套接字的新手,这是我的一段代码:

while (true) 
    $status = $this->client->read();
    echo $status;

    $this->eventQueue->hasEventToSend() ? $this->client->send($this->eventQueue->getEvent()) : null;

客户端读取方法只是:

try 
    $status = socket_read($this->socket, $length);
 catch (Throwable $exception) 
    $this->reConnect();
    Log::error($exception->getMessage());

    $status = false;


return (string) $status;

$status = $this->client->read() 之后不会执行任何操作,直到socket_read() 读取新数据。我想停止socket_read() 的行为就像等待数据读取或仅在有任何数据要读取时调用socket_read()。我不知道如何实现,所以我在这里问;)

【问题讨论】:

【参考方案1】:

默认情况下,读取操作总是阻塞的。您可以使用

socket_set_nonblock($socket)

在调用read()之前防止socket在读操作中阻塞,也可以使用

socket_select()

在读取数据之前检查数据是否可用。

【讨论】:

socket_set_nonblock() 有效,感谢您的帮助:)

以上是关于PHP socket_read 等待数据读取的主要内容,如果未能解决你的问题,请参考以下文章

PHP 可以异步使用套接字吗?

如何将socket_read值获取为从PHP websocket中的javascript发送的纯文本

PHP 从 Windows 机器上的套接字读取

关于linux系统下TCP通信 服务器read函数一直读取数据却啥都读不到的问题

MySQL锁类型(一致性是非锁定读自增和外键)

可重复读解决了什么问题?