当前位置:首页 > PHP > 正文内容

thinkphp5整合workerman,tp5整合workerman

高老师4年前 (2020-04-17)PHP363687

由于workerman底层直接读取$_SERVER['argv']的命令行参数,没有提供独立的方法start/stop,而tp的命令行参数无法适配workerman,虽然thinkphp官方专门做了一个适配的版本,但是看了下评论问题挺多的。于是自己来搞一个.

(1).在application/command.php中添加如下代码:

return [
    'app\socket\command\Socket'
];

(2).创建 application/socket/command目录,在这个目录创建Socket.php文件

<?php
namespace app\socket\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use Workerman\Worker;

class Socket extends Command
{
    /**
     * 命令Input配置
     */
    protected function configure()
    {
        $this->setName('socket')
            ->addArgument('action', Argument::OPTIONAL, "action")
            ->addOption('other', '-d', Option::VALUE_OPTIONAL, 'test');
    }

    /**
     * 重置Cli参数
     */
    protected function resetCli()
    {
        global $argv, $argc;

        $file = "{$argv['0']} {$argv['1']}";
        $action = $argv['2'];
        $extend = empty($argv['3']) ? '' : $argv['3'];
        $argv = [];
        $argv[] = $file;
        $argv[] = $action;
        if ($extend)
        {
            $argv[] = $extend;
        }
        $argc = count($argv);

        $_SERVER['argv'] = $argv;
        $_SERVER['argc'] = $argc;
    }

    /**
     * 命令响应
     * @param Input $input
     * @param Output $output
     * @return int|void|null
     */
    protected function execute(Input $input, Output $output)
    {
        //01.重置Cli命令行参数
        $this->resetCli();

        //02.开始WorkMan代码
        $ws_worker = new Worker(config('socket.socket_name'));

        // 启动4个进程对外提供服务
        $ws_worker->count = 2;

        // 接收到浏览器发送的数据时回复hello world给浏览器
        $ws_worker->onMessage = function ($connection, $data) {

            // 向浏览器发送hello world
            $connection->send('hello ' . $data);

        };

        // 运行worker
        Worker::runAll();
    }
}

(3).在tp根目录执行命令

php think socket start

名字不想叫socket,可以修改$this->setName('socket')

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/131.html

分享给朋友:

“thinkphp5整合workerman,tp5整合workerman” 的相关文章

PHP生成微信分享需要的signature签名

PHP生成微信分享需要的signature签名

因为一个TP项目中客户需要全部网页分享支持自定义图片和描述信息,于是自己封装了下 //share()微信分享链接 //参数1 appid //参数2 appsert //参数3 nonceStr随机码 //参数4 timestamp时间戳 public&nb...

cookie中文乱码,GBK下

cookie中文乱码,GBK下

上家公司开发医院挂号系统,系统采用GBK编码。ajax发送的中文用户名让PHP保存为cookie出现乱码的解决方案。1.Javascript变量var user=document.getElementById('user').innerText; user=escape(u...

PHP对象转数组

PHP对象转数组

function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

php执行慢原因查找

php执行慢原因查找

今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...

PHP yield  PHP协程,PHP协程用法学习

PHP yield PHP协程,PHP协程用法学习

【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1.  <?php   2.  $data = ['1', '2', &...