1.安装Workerman

composer require topthink/think-worker =3.0

2.宝塔的网站 -> 配置文件->添加以下代(添加下列代码到上面图片中 端口这里开放的是:2345(具体看业务需求)

location /wss
{
    proxy_pass http://127.0.0.1:2345;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Real-IP $remote_addr;
}

3.在项目跟目录/config/gateway_worker.php文件里面修改(没有自行创建)

return [
    // 扩展自身需要的配置
    'protocol'              => 'websocket', // 协议 支持 tcp udp unix http websocket text
    'host'                  => '0.0.0.0', // 监听地址
    'port'                  => 2349, // 监听端口
    'socket'                => '', // 完整监听地址
    'context'               => [], // socket 上下文选项
    'register_deploy'       => true, // 是否需要部署register
    'businessWorker_deploy' => true, // 是否需要部署businessWorker
    'gateway_deploy'        => true, // 是否需要部署gateway

    // Register配置
    'registerAddress'       => '127.0.0.1:1237',

    // Gateway配置
    'name'                  => '英雄大逃杀',// 执行后挂载昵称
    'count'                 => 1,
    'lanIp'                 => '127.0.0.1',
    'startPort'             => 2001,
    'daemonize'             => false,
    'pingInterval'          => 5, // 心跳频率
    'pingNotResponseLimit'  => 0,
    'pingData'              => '{"type":"心跳"}',

    // BusinsessWorker配置
    'businessWorker'        => [
        'name'         => '英雄大逃杀',
        'count'        => 1,
        // 'eventHandler' => '\think\worker\Events', 查看对应 项目根目录/vendor/topthink/think-worker/src/Events.php
        'eventHandler' => '\app\worker\Events', // 执行文件 默认不是这个地址
    ],

];

4.对应的命令

php think worker:gateway stop 停止
php think worker:gateway 测试环境
php think worker:gateway -d 后台运行

使用小技巧

1.倒计时推送

use Workerman\Lib\Timer;
use think\worker\Application;

public static function onWorkerStart(Worker $businessWorker)
{
    $app = new Application;
    $app->initialize();
    
    Timer::add(5, function(){
        
        // 逻辑
        
    });
}

2.服务器推送

use GatewayWorker\Lib\Gateway;
Gateway::$registerAddress = '127.0.0.1:1237';

// 推送给指定用户 A
Gateway::sendToUid(A,json_encode(array('data' => $box,'type' => 'fangjianbox')));
// 推送给全部人
 Gateway::sendToAll('测试');
// 登录绑定
Gateway::bindUid($client_id,'token');

bug处理

1.检查vendor/topthink/think-worker/src/Application.php文件方法 runningInConsole() 是否为 ningInConsole(): bool

runningInConsole(): bool