onion / event-loop
dev-master
2023-10-13 21:27 UTC
Requires
- onion/interfaces: dev-master
- onion/promise: @dev
- psr/event-dispatcher: ^1.0
Requires (Dev)
- infection/infection: ^0.27.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
- vimeo/psalm: ^5.13
Suggests
- ext-ev: For the libev loop implementation
- ext-event: For the libevent loop implementation
- ext-uv: For the libuv loop implementation (see https://github.com/symplely/ext-uv)
- symplely/uv-ffi: FFI bindings for libuv allowing for compilation-free cross-platform usage
This package is auto-updated.
Last update: 2024-09-11 14:28:07 UTC
README
这是一个完全依赖于PHP 8.1 Fibers以提供原生异步功能的异步事件循环。通过
- 引入一个
coroutine
函数来在事件循环上执行 - 添加
tick
函数,允许处理控制权返回到事件循环以与其他协程协同工作 引入自定义流包装器(async://
),使用信号以更好地透明地中断IO操作,适用于应用程序。修补原生的file://
流以透明地处理所有(除.php
文件外,因为它会与自动加载器/文件包含产生竞态条件)。
已知问题
当与symplely/uv-ffi
一起工作时,应手动调用scheduler()->start()
以显式启动事件循环,而不是依赖于自动启动,因为FFI扩展在脚本完全终止之前被卸载。
函数
channel
- 一个函数,用于创建缓冲或非缓冲通道,以便在两个或多个协程之间交换数据。如果向其$size
参数提供任何值,则确定通道类型
coroutine
- 一个函数,将提供的函数添加到事件循环中,以提供的参数执行
tick
- 一个信号包装器,旨在用于复杂/重代码,以便“标记”函数可以处理返回控制权到事件循环的点,以便允许它执行其他计划的任务。(这应该用于“低级”代码,因此对最终用户是透明的)
signal
- 此函数用于“信号”事件循环,中断当前正在运行的任务,直到提供的回调指示它应该恢复,并可选地传递执行的结果值
read
- 等待给定流变为可读,并执行提供的函数
write
- 与read
相同,但用于写入
is_pending
- 检查给定流在执行时是否有要读取/写入的数据
sleep
- 非阻塞睡眠函数,使它执行的协程挂起,直到给定时间