- Process->read
- 注意事项
- 注意事项
Process->read
从管道中读取数据。
function Process->read(int $buffer_size=8192) : string | bool;
$buffer_size是缓冲区的大小,默认为8192,最大不超过64K- 管道类型为
DGRAM数据报时,read可以读取完整的一个数据包 - 管道类型为
STREAM时,read是流式的,需要自行处理包完整性问题 - 读取成功返回二进制数据字符串,读取失败返回
false
这里是同步阻塞读取的,可以使用swoole_event_add将管道加入到事件循环中,变为异步模式
示例:
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中的数据,否则底层会持续触发事件回调。
