workbunny / webman-coroutine
Webman 插件 workbunny/webman-coroutine
0.2.1
2024-09-29 04:29 UTC
Requires
- php: ^8.0
- swow/swow: ^1.5
- webman/console: ^1.0
- workerman/webman-framework: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- mockery/mockery: ^1.6
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.6
- swoole/ide-helper: ^5.1
- symfony/var-dumper: ^6.0
Suggests
- ext-swoole: For supporting Swoole handler.
- cclilshy/p-ripple-drive: For supporting Ripple handler.
README
workbunny/webman-coroutine
🐇 Webman 协程网络服务器插件。 🐇
Webman 协程网络服务器插件。
简介
🚀🐇 webman-coroutine 是一个基于 webman 开发框架的协程支持插件
主要实现以下功能:
- 支持
workerman 4.x
的 swow 协程驱动能力,兼容workerman 5.x
版本自带的swow
协程驱动; - 支持
workerman 4.x
的 swoole 协程驱动能力,兼容workerman 5.x
版本自带的swoole
协程驱动; - 支持 ripple 协程驱动能力,兼容
revolt (PHP-fiber)
协程生态; - 实现
coroutine web server
用于实现具备协程能力的 web 服务;
说明
workerman 4.x/5.x
驱动下的 webman 框架无法完整使用swoole
的协程能力,所以使用CoroutineWebServer
来替代webman
自带的webServer
workerman 4.x
下还未有官方支持的swow
协程驱动,本插件提供SwowEvent
事件驱动支持workerman 4.x
下的协程能力- 由于配置
event-loop
等操作相较于普通开发会存在一定的心智负担,所以本插件提供了event_loop()
函数,用于根据当前环境自动选择合适的事件驱动
安装
通过 composer
安装
composer require workbunny/webman-coroutine
注:目前处于开发阶段,请使用
dev-main
分支体验
配置说明
- enable : (true/false), 是否启用协程 webServer
- port : (int), 协程 webServer 默认端口
- channel_size : (int), 每个连接的 channel 容量
- consumer_count : (int), 每个连接的消费者数量
使用
1. swow 环境
- 使用
./vendor/bin/swow-builder
安装swow
扩展,注意请关闭swoole
环境 - 修改
config/server.php
中'event_loop' => \Workbunny\WebmanCoroutine\event_loop()
,event_loop()
函数会根据当前环境自行判断当前的 workerman 版本,自动选择合适的事件驱动- 当开启
swow
扩展时,workerman 4.x
下使用SwowEvent
事件驱动 - 当开启
swow
扩展时,workerman 5.x
下使用workerman
自带的Swow
事件驱动 - 当未开启
swow
时,使用workerman
自带的Event
事件驱动
- 当开启
- 使用
php -d extension=swow webman start
启动 - webman 自带的 webServer 协程化,可以关闭启动的
CoroutineWebServer
注:
CoroutineWebServer
可以在config/plugin/workbunny/webman-coroutine/app.php
中通过enable=false
关闭启动
2. swoole 环境
- 使用
pecl install swoole
安装稳定版 swoole 扩展 - 建议不要将
swoole
加入php.ini
配置文件 - 修改
config/server.php
中'event_loop' => \Workbunny\WebmanCoroutine\event_loop()
,event_loop()
函数会根据当前环境自行判断当前的 workerman 版本,自动选择合适的事件驱动- 当开启 swoole 扩展时,workerman 4.x 下使用 SwooleEvent 事件驱动
- 当开启 swoole 扩展时,workerman 5.x 下使用 workerman 自带的 Swoole 事件驱动
- 当未开启 swoole 时,使用 workerman 自带的 Event 事件驱动
- 使用
php -d extension=swoole webman start
启动 - 通过
config/plugin/workbunny/webman-coroutine/process.php
启动的 CoroutineWebServer 可以用于协程环境开发,原服务还是 BIO 模式
3. ripple 环境
- 使用
composer require cclilshy/p-ripple-drive
安装 ripple 驱动插件 - 修改
config/server.php
配置'event_loop' => \Workbunny\WebmanCoroutine\event_loop()
自动判断,请勿开启 swow、swoole,'event_loop' => \Workbunny\WebmanCoroutine\Factory::RIPPLE_FIBER
手动指定
- 使用
php webman start
启动
注:该环境协程依赖
php-fiber
,并没有自动hook
系统的阻塞函数,但支持所有支持php-fiber
的插件
文档
♨️ 相关文章
- webman 如何使用 swow 事件驱动和协程?
- PHP 高性能纯协程网络通信引擎 Swow
- workerman5.0 和 swoole5.0 实现一键协程
- webman 如何使用 swoole 事件驱动和协程?
💕 致谢
💕 感恩 workerman 和 swow 开发团队为 PHP 社区带来的创新和卓越贡献,让我们共同期待 PHP 在实时应用领域的更多突破!!!