https://github.com/workbunny/event-loop
🐇 A high-performance event loop library for PHP
https://github.com/workbunny/event-loop
event-loop php
Last synced: 10 months ago
JSON representation
🐇 A high-performance event loop library for PHP
- Host: GitHub
- URL: https://github.com/workbunny/event-loop
- Owner: workbunny
- License: mit
- Archived: true
- Created: 2022-01-21T10:43:37.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-09-14T10:34:51.000Z (over 2 years ago)
- Last Synced: 2025-04-06T14:51:12.447Z (11 months ago)
- Topics: event-loop, php
- Language: PHP
- Homepage:
- Size: 129 KB
- Stars: 24
- Watchers: 0
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

**
workbunny/event-loop
**
**
🐇 A high-performance event loop library for PHP 🐇
**
## 简介
一个事件循环库,目的是为了构建高性能网络应用。
## 使用
注:本文档为 1.2.x 版本,旧版请点击 **[1.1.x 版本](https://github.com/workbunny/event-loop/tree/1.1.x)** 跳转
注:swowloop还未完成单元测试,敬请等待
### 安装
```
composer require workbunny/event-loop
```
### 创建loop
```php
use WorkBunny\EventLoop\Loop;
use WorkBunny\EventLoop\Drivers\NativeLoop;
use WorkBunny\EventLoop\Drivers\EventLoop;
use WorkBunny\EventLoop\Drivers\EvLoop;
use WorkBunny\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
```php
use WorkBunny\EventLoop\Loop;
// 注册
loop::register(YourLoopClass::class);
// 创建
$yourLoop = Loop::create(YourLoopClass::class);
```
### 创建定时器
- Future 触发器
```php
/**
* @Future [delay=0.0, repeat=false]
* 在下一个周期执行,执行一次即自动销毁
*/
$loop->addTimer(0.0, false, function (){ echo 'timer'; }); // loop->run()后立即输出字符串
```
- ReFuture 重复触发器
```php
/**
* @ReFuture [delay=0.0, repeat=0.0]
* 在每一个周期执行,不会自动销毁
*/
$id = $loop->addTimer(0.0, 0.0, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁
$loop->delTimer($id);
});
```
- DelayReFuture 延迟的重复触发器
```php
/**
* @DelayReFuture [delay>0.0, repeat=0.0]
* 延迟delay秒后每一个周期执行,不会自动销毁
*/
$id = $loop->addTimer(1.0, 0.0, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁
$loop->delTimer($id);
});
```
- Delayer 延迟器
```php
/**
* @Delayer [delay>0.0, repeat=false]
* 延迟delay秒后执行,执行一次即自动销毁
*/
$loop->addTimer(2.0, false, function (){ echo 'timer'; }); // loop->run() 2秒后输出字符串
```
- Timer 定时器
```php
/**
* @Timer [delay=0.0, repeat>0.0]
* 在下一个周期开始每间隔repeat秒执行,不会自动销毁
*/
$id = $loop->addTimer(0.1, 0.1, function () use(&$loop, &$id) {
// 此方法可以实现自我销毁
$loop->delTimer($id);
});
```
- DelayTimer 延迟的定时器
```php
/**
* @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](https://www.php.net/manual/zh/book.stream.php)**
- 读取流
```php
// 创建
$loop->addReadStream(resource, function (resource $stream) { });
// 注意:EvLoop在这里较为特殊,回调函数的入参为EvIo对象
$loop->addReadStream(resource, function (\EvIo $evio) {
$evio->stream // resource 资源类型
});
// 移除
$loop->delReadStream(resource);
```
- 写入流
```php
// 创建
$loop->addWriteStream(resource, function (resource $stream) { });
// 注意:EvLoop在这里较为特殊,回调函数的入参为EvIo对象
$loop->addWriteStream(resource, function (\EvIo $evio) {
$evio->stream // resource 资源类型
});
// 移除
$loop->delWriteStream(resource);
```
### 信号事件
用于接收系统的信号,比如kill等
```php
// 注册
$loop->addSignal(\SIGUSR1, function (){});
// 移除
$loop->delSignal(\SIGUSR1, function (){});
```
### 启动/停止
- 启动
以下代码会持续阻塞,请放在程序最后一行
```php
# 该函数后会阻塞
$loop->loop();
# 该行代码不会执行
var_dump('123');
```
- 停止
以下代码不会阻塞等待
```php
$loop->destroy();
# 该行代码会执行
var_dump('123');
```
---