首页 > 系统相关 >Fastadmin(thinkphp5)安装集成workerman(gatewayworker)Linux环境

Fastadmin(thinkphp5)安装集成workerman(gatewayworker)Linux环境

时间:2024-10-05 14:22:40浏览次数:8  
标签:function worker thinkphp5 gateway client Fastadmin workerman id

一、安装

直接上命令

composer require topthink/think-worker 1.0.1 //因为fastadmin的tp版本是5,所以这里1.0.1
composer update --with-all-dependencies

找到根目录的composer.json修改制定版本

composer require workerman/gateway-worker

至此安装完成。

二、启动

然后在项目中增加相应的文件启动wokerman gateway

找到路径文件  application/command.php
'app\common\command\Workerman',         // workerman //增加一行

 

//文件内容

<?php


namespace app\common\command;

use app\workerman\controller\WorkerEvents;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\Env;
use Workerman\Worker;

class Workerman extends Command
{
    protected function configure()
    {
        $this->setName('workerman')
            ->addArgument('action', Argument::OPTIONAL, "action  start|stop|restart")
            ->addArgument('type', Argument::OPTIONAL, "d -d")
            ->setDescription('workerman chat');
    }

    protected function execute(Input $input, Output $output)
    {
        global $argv;
        $action = trim($input->getArgument('action'));
        $type   = trim($input->getArgument('type')) ? '-d' : '';


        $argv[0] = 'chat';
        $argv[1] = $action;
        $argv[2] = $type ? '-d' : '';
//        dump($argv);exit;
        $this->start();
    }
    private function start()
    {
        $this->startGateWay();
        $this->startBusinessWorker();
        $this->startRegister();
        Worker::runAll();
    }

    private function startBusinessWorker()
    {
        $worker                  = new BusinessWorker();
        $worker->name            = 'BusinessWorker';
        $worker->count           = 1;
        $worker->registerAddress = '127.0.0.1:1236';
        $worker->eventHandler    = WorkerEvents::class;
    }

    private function startGateWay()
    {
        // gateway 进程
        $gateway = new Gateway("websocket://0.0.0.0:39001");
        // 设置名称,方便status时查看
        $gateway->name = 'Gateway';
        // 设置进程数,gateway进程数建议与cpu核数相同
        $gateway->count = 4;
        // 分布式部署时请设置成内网ip(非127.0.0.1)
        $gateway->lanIp = '127.0.0.1';
        // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
        // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
        $gateway->startPort = 2300;
        // 心跳间隔
        $gateway->pingInterval = 60;
        // 时间内,客户端未发送任何数据,断开客户端连接
        $gateway->pingNotResponseLimit = 180;
        // 心跳数据
        $gateway->pingData = '{"type":"ping"}';
        // 服务注册地址
        $gateway->registerAddress = '127.0.0.1:1238';
        /*
        // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
        $gateway->onConnect = function($connection)
        {
            $connection->onWebSocketConnect = function($connection , $http_header)
            {
                // 可以在这里判断连接来源是否合法,不合法就关掉连接
                // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
                if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
                {
                    $connection->close();
                }
                // onWebSocketConnect 里面$_GET $_SERVER是可用的
                // var_dump($_GET, $_SERVER);
            };
        };
        */
    }

    private function startRegister()
    {
        new Register('text://0.0.0.0:1236');
    }
}

 创建新文件路径地址:application/workerman/WorkerEvents.php

 文件内容:

<?php


namespace app\workerman\controller;

use GatewayWorker\Lib\Gateway;

class WorkerEvents
{
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
        $data['type'] = 'get_client_id';
        $data['data'] = ['client_id' => $client_id];
        // 向当前client_id发送数据
        Gateway::sendToClient($client_id, json_encode($data, JSON_UNESCAPED_UNICODE));
    }

    /**
     * 当客户端发来消息时触发
     * @param int $client_id 连接id
     * @param mixed $message 具体消息
     */
    public static  function onMessage($client_id, $message)
    {
        dump("收到消息");
        dump($client_id);
        dump($message);
        //不作处理
    }

    /**
     * 当用户断开连接时触发
     * @param int $client_id 连接id
     */
    public static function onClose($client_id)
    {
        dump("断开连接".$client_id);
    }
}

启动服务

php think workerman start

 

 

标签:function,worker,thinkphp5,gateway,client,Fastadmin,workerman,id
From: https://www.cnblogs.com/wt645631686/p/18447825

相关文章

  • fastadmin: 避免引入页面同名js
    一,单个view中:写到方法最后fetch操作之前://列出所有新房publicfunctionlist(){...$config=$this->view->config;$config['jsname']='';$this->assign('config',$config);......
  • thinkphp5数据库迁移工具 migration(longtext/tinyint等)
    我用tp5创建文件phpthinkmigrate:createUser在User文件里面写publicfunctionup(){$this->table('a3')->addColumn('a','integer',['limit'=>'10','default'=>0,'signed'=&......
  • Fastadmin 在列表页window.top.open打开新页面操作表单后保持表单验证回调操作
    //列表页click事件$(document).on('click','#add_customer',function(){varurl="ap/controller/add";vardata={area:["1050px","588px"],......
  • fastadmin 文件上传腾讯云
    1-安装腾讯云SDKcomposerrequireqcloud/cos-sdk-v52-腾讯云配置<?phpnamespaceapp\common\controller;useQcloud\Cos\Client;usethink\Controller;usethink\Db;classTencentextendsController{/***上传文件*@param$config*@p......
  • fastadmin 弹出窗口的功能
    页面A,html代码中添加一个按钮:添加复制页面A,在js代码中添加以下代码监听class=spec_add_btn这个按钮的点击事件并弹窗打开页面B$(document).on('click','.spec_add_btn',function(event){varurl=$(this).attr('data-url');if(!url)returnfalse;varmsg=$(this).at......
  • ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞(5-rce)
    漏洞原理该漏洞存在两种利用方式控制器名未过滤导致rce该漏洞出现的原因在于ThinkPHP5框架底层对控制器名过滤不严,从而让攻击者可以通过url调用到ThinkPHP框架内部的敏感函数,进而导致getshell漏洞核心类Request远程代码执行filter[]为回调函数,get[]或route[]或server[R......
  • thinkphp5跨域问题
    首先我想到的是在配置文件中加跨域header("Access-Control-Allow-Origin:*");header('Access-Control-Allow-Methods:*');header('Access-Control-Allow-Headers:x-requested-with,content-type,token');header('Access-Control-Allow-Credentials',......
  • fastadmin 搭建项目,gitignore忽略文件配置,避免在操作git时产生代码冲突
    当多人进行开发fastadmin项目时,在提交代码到git仓库前,有一些文件如果不进行git忽略的话,在开发过程中很容易导致git冲突~以下是我在开发fastadmin项目时常用的gitignore文件的写法,在新项目提交到git仓库前可以进行替换(替换项目根目录的.gitignore文件内容)#BuildandReleaseFo......
  • FastAdmin前端开发——词条生成二维码
    一、前端开发基础文件序号文件路径功能1application/index/controller控制器文件2application/index/lang/zh-cn语言包3application/index/model模型文件4application/index/view/common/sidenav.html左侧菜单栏5application/index/view/index.html右侧列表视图6application/i......
  • FastAdmin目录穿越 CVE-2024-7928
    0x01漏洞描述:FastAdmin是一款基于ThinkPHP+Bootstrap开发的快速后台开发框架。FastAdmin基于Apache2.0开源协议发布,免费且不限制商业使用,目前被广泛应用于各大行业应用后台管理。其接口lang存在目录穿越漏洞,攻击者可通过该漏洞获取系统库敏感信息。0x02影响版本:FastAdmin......