🧨 webman-大发黄金版app下载
🐞 简介
🚀🚀 webman-coroutine 是一个 webman 开发框架生态下的协程基建支撑插件
🕷️ 功能
- 支持workerman 4.x的 协程驱动能力,兼容workerman 5.x版本自带的swow协程驱动;
- 支持workerman 4.x的 协程驱动能力,兼容workerman 5.x版本自带的swoole协程驱动;
- 支持  协程驱动能力,兼容revolt (php-fiber)协程生态;
- 提供coroutine web server用于实现具备协程能力的web服务;
- 支持纯 workerman 环境,支持 webman 开发框架
🪰 安装
通过composer安装
composer require workbunny/webman-coroutine输出日志
/var/www/demo.webman.tinywan.com # composer require workbunny/webman-coroutine
./composer.json has been updated
running composer update workbunny/webman-coroutine
loading composer repositories with package information
updating dependencies
lock file operations: 3 installs, 0 updates, 0 removals
  - locking composer/semver (3.4.3)
  - locking swow/swow (v1.5.3)
  - locking workbunny/webman-coroutine (1.0.2)
writing lock file
installing dependencies from lock file (including require-dev)
package operations: 3 installs, 0 updates, 0 removals
  - installing composer/semver (3.4.3): extracting archive
  - installing swow/swow (v1.5.3): extracting archive
  - installing workbunny/webman-coroutine (1.0.2): extracting archive
> support\plugin::install
> support\plugin::install
> support\plugin::install
create config/plugin/workbunny/webman-coroutine
3 package suggestions were added by new dependencies, use `composer suggest` to see details.
generating autoload files
55 packages you are using are looking for funding.
use the `composer fund` command to find out more!
no security vulnerability advisories found.
using version ^1.0 for workbunny/webman-coroutine🪲 安装swow
使用./vendor/bin/swow-builder安装swow拓展,注意请关闭swoole环境
/var/www/demo.webman.tinywan.com # ./vendor/bin/swow-builder
> cd /var/www/demo.webman.tinywan.com/vendor/swow/swow/ext && \
phpize && \
./configure 
configuring for:
php api version:         20230831
zend module api no:      20230831
zend extension api no:   420230831
checking for grep that handles long lines and -e... /bin/grep
....
👀 do you want to install it right now? (y/n): y
> cd /var/www/demo.webman.tinywan.com/vendor/swow/swow/ext && \
make install
installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20230831/
✅ install done
🚀🚀🚀 all tasks have been completed 🚀🚀🚀🐜 webman 使用
1. 配置server.php
修改事件驱动为event_loop(),event_loop()用于自动判断当前环境适合的event loop和协程驱动
'event_loop' => \workbunny\webmancoroutine\event_loop(),2. 启动webman
通过以下命令启动webman
php -d extension=swow webman start启动输出
/var/www/demo.webman.tinywan.com # php -d extension=swow webman start
workerman[webman] start in debug mode
---------------------------------------------------------------- workerman -----------------------------------------------------------------
workerman version:4.1.15          php version:8.3.9           event-loop:workbunny\webmancoroutine\events\swowevent
----------------------------------------------------------------- workers ------------------------------------------------------------------
proto   user            worker                                                    listen                      processes    status           
tcp     root            webman                                                    http://0.0.0.0:8217         8             [ok]            
tcp     root            monitor                                                   none                        1             [ok]            
tcp     root            plugin.workbunny.webman-coroutine.coroutine-web-server    http://[::]:8717            2             [ok]            
tcp     root            plugin.saiadmin.task                                      none                        1             [ok]            
tcp     root            plugin.saiadmin.websocket                                 websocket://0.0.0.0:9527    1             [ok]            
--------------------------------------------------------------------------------------------------------------------------------------------
press ctrlc to stop. start success.3. 新建控制器
coroutinecontroller.php 伪代码
/**
 * @author tinywan(shaobo wan)
 * @date 2024/10/8 23:37
 */
declare(strict_types=1);
namespace app\controller;
use support\request;
use webman\http\response;
use workbunny\webmancoroutine\utils\coroutine\coroutine;
use workbunny\webmancoroutine\utils\waitgroup\waitgroup;
class coroutinecontroller
{
    public function index(request $request): response
    {
        $timeone = microtime(true);
        $waitgroup = new waitgroup();
        // 协程1
        $waitgroup->add();
        $coroutine1 = new coroutine(function () use ($waitgroup) {
            task1();
            $waitgroup->done();
        });
        // 协程2
        $waitgroup->add();
        $coroutine2 = new coroutine(function () use ($waitgroup) {
            task2();
            $waitgroup->done();
        });
        // 协程3
        $waitgroup->add();
        $coroutine3 = new coroutine(function () use ($waitgroup) {
            task3();
            $waitgroup->done();
        });
        $waitgroup->wait();
        $timetwo = microtime(true);
        $totaltime = $timetwo - $timeone;
        echo '[x] [总执行时间] ' . $totaltime . php_eol;
        return json(['总执行时间' => $totaltime]);
    }
}模拟执行任务方法
/** @desc 任务1 */
function task1(): void
{
    $timeone1 = microtime(true);
    for ($i = 1; $i <= 1; $i) {
        sleep(1);
        echo '[x] [🕷️] [写入文件] [' . $i . '] ' . date('y-m-d h:i:s') . php_eol;
    }
    $timetwo1 = microtime(true);
    echo '[x] [写入文件-总时间] ' . ($timetwo1 - $timeone1) . php_eol . php_eol;
}
/** @desc 任务2 */
function task2(): void
{
    $timeone2 = microtime(true);
    for ($i = 1; $i <= 3; $i) {
        sleep(1);
        echo '[x] [🍁] [发送邮件] [' . $i . '] ' . date('y-m-d h:i:s') . php_eol;
    }
    $timetwo2 = microtime(true);
    echo '[x] [发送邮件-总时间] ' . ($timetwo2 - $timeone2) . php_eol . php_eol;
}
/** @desc 任务3 */
function task3(): void
{
    $timeone3 = microtime(true);
    for ($i = 1; $i <= 5; $i) {
        sleep(1);
        echo '[x] [🌾] [发送短信] [' . $i . '] ' . date('y-m-d h:i:s') . php_eol;
    }
    $timetwo3 = microtime(true);
    echo '[x] [发送短信-总时间] ' . ($timetwo3 - $timeone3) . php_eol . php_eol;
}4、执行http请求
请求地址:http://127.0.0.1:8217/coroutine/index
控制台输出结果
[x] [🕷️] [写入文件] [1] 2024-10-08 23:48:56
[x] [写入文件-总时间] 0.9472222328186
[x] [🍁] [发送邮件] [1] 2024-10-08 23:48:56
[x] [🌾] [发送短信] [1] 2024-10-08 23:48:56
[x] [🍁] [发送邮件] [2] 2024-10-08 23:48:57
[x] [🌾] [发送短信] [2] 2024-10-08 23:48:57
[x] [🍁] [发送邮件] [3] 2024-10-08 23:48:58
[x] [发送邮件-总时间] 2.9497091770172
[x] [🌾] [发送短信] [3] 2024-10-08 23:48:58
[x] [🌾] [发送短信] [4] 2024-10-08 23:48:59
[x] [🌾] [发送短信] [5] 2024-10-08 23:49:00
[x] [发送短信-总时间] 4.9520699977875
[x] [总执行时间] 4.9987840652466本作品采用《cc 协议》,转载必须注明作者和本文链接
                      本帖由系统于 1周前 自动加精
            
 
 
推荐文章: