Process->read
最后更新于:2022-04-02 06:35:14
# Process->read
[TOC]
从管道中读取数据。
~~~
function Process->read(int $buffer_size=8192) : string | bool;
~~~
* `$buffer_size`是缓冲区的大小,默认为`8192`,最大不超过`64K`
* 管道类型为`DGRAM`数据报时,`read`可以读取完整的一个数据包
* 管道类型为`STREAM`时,`read`是流式的,需要自行处理包完整性问题
* 读取成功返回二进制数据字符串,读取失败返回`false`
> 这里是同步阻塞读取的,可以使用[swoole\_event\_add](swoole\_event\_add.md)将管道加入到事件循环中,变为异步模式
示例:
~~~
function callback_function_async(swoole_process $worker)
{
$GLOBALS['worker'] = $worker;
swoole_event_add($worker->pipe, function($pipe) {
$worker = $GLOBALS['worker'];
$recv = $worker->read();
echo "From Master: $recv\n";
//send data to master
$worker->write("hello master\n");
sleep(2);
$worker->exit(0);
});
}
~~~
## 注意事项
由于`Swoole`底层使用了`epoll`的`LT`模式,因此`swoole_event_add`添加的事件监听,在事件发生后回调函数中必须调用`read`方法读取`socket`中的数据,否则底层会持续触发事件回调。
';