跳到主要内容

流 (Stream)

概述

ripple中Stream是一个基于事件的数据流,它可以用于处理大量的数据,例如文件读取、网络请求等。 所有的Stream都实现了PSR规范下的StreamInterface, 另外封装了多个常用的监听流方法如

订阅的可读可写事件,所有闭包都所处于事件运行时上下文,并且闭包中会收到两个参数

  • Stream $stream 当前流对象
  • Closure $cancel 取消订阅的闭包
Closure(Stream $stream,Closure $cancel);

订阅可读事件

public function onReadable(Closure $closure): string;

$stream = \Co\IO::File()->open('file.txt');
$stream->onReadable(function (Stream $stream,Closure $cancel) {
$data = $stream->read(1024);
echo $data . PHP_EOL;

//取消订阅
$cancel();
});

订阅可写事件

public function onWritable(Closure $closure): string;

订阅关闭事件

public function onClose(Closure $closure): void;

注意事项

一个流允许同时存在多个订阅,并且他们都会被执行,但对于读/写操作来说, 这样做通常没有意义,因为第一个订阅者会消耗掉数据,导致后续订阅者无法读取数据。