Thinkphp5.1里使用workerman的方法

发布时间 - 2020-02-10 00:00:00    点击率:

workerman是一款纯php开发的开源高性能的异步php socket框架。thinkphp是一个快速、兼容而且简单的轻量级国产php开发框架,本文就来为大家介绍一下thinkphp5.1里使用workerman的方法。

之前一直用swoole,最近研究workerman,于是composer安装

composer require workerman/workerman

在Thinkphp控制器里面写一段测试代码

count = 4;

        // 接收到浏览器发送的数据时回复hello world给浏览器
        $http_worker->onMessage = function($connection, $data)
        {
            // 向浏览器发送hello world
            $connection->send('hello world');
        };
        // 运行worker
        Worker::runAll();
    }

}

命令行执行:php index.php workerman/index。以为大功告成,但是却报下面的提示:

很明显,workerman不能直接运行文件,看官方文档是使用

php index.php startphp index.php stopphp index.php restart

这样的格式执行。于是修改index.php文件绑定路由

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind("workerman/index")->run()->send();

直接运行php index.php start,汗,居然提示说找不到start该模型。特么tp5把start作为路由解析了。那怎么办,workerman的需要使用start的方式执行,tp5却要把该参数解析成模型啊。

后查阅资料发现,Thinkphp5.1本身就整合了workerman了。可以使用thinkphp5的方式安装workerman,那样就可以使用thinkphp的运行方式运行了。

执行命令改成:

php think worker

后续发现Thinkphp5.1整合的workerman封装的有点麻烦,不好用,而且如果你想用PHPSocketIO之类的workerman服务用整合的方式很麻烦。

workerman把第一个参数作为操作服务的命令,那我把它改成用第二个参数作为操作命令行不行?

果然就是这么做的。查找workerman插件里面的parseCommand()函数。这个鬼函数就是获取那个操作命令的,把:

argv[1]改成argv[2],argv[2]改成argv[2]改成argv[2]改成argv[3]

    protected static function parseCommand()
    {
        if (static::$_OS !== OS_TYPE_LINUX) {
            return;
        }
        global $argv;
        // Check argv;
        $start_file = $argv[0];
        $available_commands = array(
            'start',
            'stop',
            'restart',
            'reload',
            'status',
            'connections',
        );
        $usage = "Usage: php yourfile  
        [mode]\nCommands: \nstart\t\tStart worker in DEBUG mode.\n\t\tUse mode -d to start in DAEMON mode.\nstop\t\tStop worker.\n\t\tUse mode -g to stop gracefully.\nrestart\t\tRestart workers.\n\t\tUse mode -d to start in DAEMON mode.\n\t\tUse mode -g to stop gracefully.\nreload\t\tReload codes.\n\t\tUse mode -g to reload gracefully.\nstatus\t\tGet worker status.\n\t\tUse mode -d to show live status.\nconnections\tGet worker connections.\n";
        if (!isset($argv[2]) || !in_array($argv[2], $available_commands)) {
            if (isset($argv[2])) {
                static::safeEcho('Unknown command: ' . $argv[2] . "\n");
            }
            exit($usage);
        }

        // Get command.
        $command  = trim($argv[2]);
        $command2 = isset($argv[3]) ? $argv[3] : '';

执行命令改成

php server.php index start

(第一个参数用于Thinkphp解析路由,第二个参数用于workerman解析操作服务命令)

更多workerman知识请关注PHP中文网workerman框架教程栏目。


# thinkphp  # workerman  # 第一个  # 第二个  # 是一个  # 如果你  # 找不到  # 把它  # 那我  # 中文网  # 大功告成  # 可以使用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何基于云服务器快速搭建个人网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  微信小程序 canvas开发实例及注意事项  JavaScript Ajax实现异步通信  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel怎么在Controller之外的地方验证数据  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  JS碰撞运动实现方法详解  Firefox Developer Edition开发者版本入口  如何挑选高效建站主机与优质域名?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  PythonWeb开发入门教程_Flask快速构建Web应用  独立制作一个网站多少钱,建立网站需要花多少钱?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  java中使用zxing批量生成二维码立牌  用yum安装MySQLdb模块的步骤方法  *服务器网站为何频现安全漏洞?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  网站制作软件免费下载安装,有哪些免费下载的软件网站?  bing浏览器学术搜索入口_bing学术文献检索地址  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel如何使用Blade组件和插槽?(Component代码示例)  使用spring连接及操作mongodb3.0实例  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  大同网页,大同瑞慈医院官网?  微信小程序 input输入框控件详解及实例(多种示例)  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何在服务器上配置二级域名建站?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  JavaScript如何实现倒计时_时间函数如何精确控制  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化