多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# swoole_process->read 从管道中读取数据。 ```php function swoole_process->read(int $buffer_size=8192) : string | bool; ``` * `$buffer_size`是缓冲区的大小,默认为`8192`,最大不超过`64K` * 管道类型为`DGRAM`数据报时,`read`可以读取完整的一个数据包 * 管道类型为`STREAM`时,`read`是流式的,需要自行处理包完整性问题 * 读取成功返回二进制数据字符串,读取失败返回`false` > 这里是同步阻塞读取的,可以使用[swoole_event_add](https://wiki.swoole.com/wiki/page/119.html)将管道加入到事件循环中,变为异步模式 示例: ```php 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`中的数据,否则底层会持续触发事件回调。