werkint/reactphp-stream

该包已被弃用,不再维护。作者建议使用werkint/reactphp-stream包。

基本可读和可写流接口,支持管道传输。

v0.4.4 2016-08-22 09:51 UTC

README

Build Status

基本可读和可写流接口,支持管道传输。

为了使事件循环更容易使用,该组件引入了流的概念。它们与PHP本身中的流非常相似,但接口更适合异步I/O。

主要提供可读和可写流的接口,以及基于文件描述符的实现,具有内存写缓冲区。

此组件依赖于événement,它是EventEmitter的实现。

可读流

EventEmitter事件

  • data:每次从源读取数据时都会触发。
  • end:当源达到eof时触发。
  • error:发生错误时触发。
  • close:连接关闭时触发。

方法

  • isReadable():检查流是否仍然处于可读状态。当连接结束、关闭或发生错误时,流变为不可读。
  • pause():从事件循环中移除数据源文件描述符。这允许您限制传入数据。
  • resume():在pause()之后重新附加数据源。
  • pipe(WritableStreamInterface $dest, array $options = []):将此可读流管道传输到可写流。自动将所有传入数据发送到目标。根据目标可以处理的数据自动调整节流。

可写流

EventEmitter事件

  • drain:如果写缓冲区之前已满且现在准备好接受更多数据时触发。
  • error:发生错误时触发。
  • close:关闭连接时触发。
  • pipe:当可读流被pipe()到该流时触发。

方法

  • isWritable():检查流是否可以继续写入。在发生错误或关闭后无法写入。
  • write($data):将一些数据写入流。如果流无法处理,则应缓冲数据或触发一个error事件。如果内部缓冲区在添加$data后已满,则write应返回false,表示调用者应停止发送数据,直到缓冲区drain
  • end($data = null):可选地将一些最终数据写入流,清空缓冲区,然后关闭它。

用法

    $loop = React\EventLoop\Factory::create();

    $source = new React\Stream\Stream(fopen('omg.txt', 'r'), $loop);
    $dest = new React\Stream\Stream(fopen('wtf.txt', 'w'), $loop);

    $source->pipe($dest);

    $loop->run();