Skip to content
This repository was archived by the owner on Apr 3, 2025. It is now read-only.

Repository files navigation

workbunny

workbunny/event-loop

🐇 A high-performance event loop library for PHP 🐇

Build StatusPHP Version RequireGitHub license

简介

一个事件循环库,目的是为了构建高性能网络应用。

使用

注:本文档为 1.2.x 版本,旧版请点击 1.1.x 版本 跳转 注:swowloop还未完成单元测试,敬请等待

安装

composer require workbunny/event-loop

创建loop

useWorkBunny\EventLoop\Loop;
useWorkBunny\EventLoop\Drivers\NativeLoop;
useWorkBunny\EventLoop\Drivers\EventLoop;
useWorkBunny\EventLoop\Drivers\EvLoop;
useWorkBunny\EventLoop\Drivers\SwowLoop;
// 创建PHP原生loop$loop = Loop::create(NativeLoop::class);
// 创建ext-event loop$loop = Loop::create(EventLoop::class);
// 创建ext-ev loop$loop = Loop::create(EvLoop::class);
// 创建swow loop$loop = Loop::create(SwowLoop::class);

注册loop

  • 创建 YourLoopClass 实现 LoopInterface
  • 调用 Loop::register() 注册 YourLoopClass
useWorkBunny\EventLoop\Loop;
// 注册
loop::register(YourLoopClass::class);
// 创建$yourLoop = Loop::create(YourLoopClass::class);

创建定时器

  • Future 触发器
/** * @Future [delay=0.0, repeat=false] * 在下一个周期执行,执行一次即自动销毁 */$loop->addTimer(0.0, false, function (){ echo'timer'; }); // loop->run()后立即输出字符串
  • ReFuture 重复触发器
/** * @ReFuture [delay=0.0, repeat=0.0] * 在每一个周期执行,不会自动销毁 */$id = $loop->addTimer(0.0, 0.0, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁$loop->delTimer($id);
});
  • DelayReFuture 延迟的重复触发器
/** * @DelayReFuture [delay>0.0, repeat=0.0] * 延迟delay秒后每一个周期执行,不会自动销毁 */$id = $loop->addTimer(1.0, 0.0, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁$loop->delTimer($id);
});
  • Delayer 延迟器
/** * @Delayer [delay>0.0, repeat=false] * 延迟delay秒后执行,执行一次即自动销毁 */$loop->addTimer(2.0, false, function (){ echo'timer'; }); // loop->run() 2秒后输出字符串
  • Timer 定时器
/** * @Timer [delay=0.0, repeat>0.0] * 在下一个周期开始每间隔repeat秒执行,不会自动销毁 */$id = $loop->addTimer(0.1, 0.1, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁$loop->delTimer($id);
});
  • DelayTimer 延迟的定时器
/** * @DelayTimer [delay>0.0, repeat>0.0] * 延迟delay秒后每间隔repeat秒执行,不会自动销毁 */$id = $loop->addTimer(0.2, 0.1, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁$loop->delTimer($id);
});

流事件

这里的流是指 PHP Streams

  • 读取流
// 创建$loop->addReadStream(resource, function (resource$stream) { });
// 注意:EvLoop在这里较为特殊,回调函数的入参为EvIo对象$loop->addReadStream(resource, function (\EvIo$evio) {
$evio->stream// resource 资源类型
});
// 移除$loop->delReadStream(resource);
  • 写入流
// 创建$loop->addWriteStream(resource, function (resource$stream) { });
// 注意:EvLoop在这里较为特殊,回调函数的入参为EvIo对象$loop->addWriteStream(resource, function (\EvIo$evio) {
$evio->stream// resource 资源类型
});
// 移除$loop->delWriteStream(resource);

信号事件

用于接收系统的信号,比如kill等

// 注册$loop->addSignal(\SIGUSR1, function (){});
// 移除$loop->delSignal(\SIGUSR1, function (){});

启动/停止

  • 启动

    以下代码会持续阻塞,请放在程序最后一行

# 该函数后会阻塞$loop->loop();
# 该行代码不会执行var_dump('123');
  • 停止

    以下代码不会阻塞等待

$loop->destroy();
# 该行代码会执行var_dump('123');

About

🐇 A high-performance event loop library for PHP

Topics

Resources

Stars

25 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages