fastadmin(tp5)搭建gateway

先把composer调成国内镜像:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

或阿里镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

不更换也行,但是很慢,建议更换

 

进项目根目录(不是public)

composer require workerman/gateway-worker

 

装完后,在public里新建一个php文件:chat.php

复制代码
<?php

// [ 应用入口文件 ]
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');

//此处为绑定的模块
define('BIND_MODULE','push/Start');

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
复制代码

 

 然后在 application 里创建一个 文件夹:push

 

 在push下再创建一个controller文件夹

 再创建两个文件:Start.php、Events.php

  

 

 Start.php:

复制代码
<?php

namespace app\push\controller;

use Workerman\Worker;
use GatewayWorker\Register;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;

class Start
{
    public function __construct()
    {
        //定义端口
        $port = 2500;
        // 初始化register
        new Register('text://0.0.0.0:' . $port);

        //初始化 bussinessWorker 进程
        $worker = new BusinessWorker();
        $worker->name = 'chatWorker';  //进程名
        $worker->count = 4;  //进程数
        $worker->registerAddress = '127.0.0.1:' . $port; 

        // 设置处理业务的类,此处制定Events的命名空间
        $worker->eventHandler = '\app\push\controller\Events';
        // 初始化 gateway 进程
        $gateway = new Gateway("websocket://0.0.0.0:2501");
        $gateway->name = 'chatGateway'; //Gateway进程名
        $gateway->count =  4;  //Gateway进程数
        $gateway->lanIp = '127.0.0.1';
        $gateway->startPort = 2000;  //开始端口
//        $gateway->pingInterval = 60;
//        $gateway->pingNotResponseLimit = 5;
//        $gateway->pingData = 'pong';
        $gateway->registerAddress = '127.0.0.1:' . $port;

        // 运行所有Worker;
        Worker::runAll();
    }
}
复制代码

 

Events.php

复制代码
<?php

namespace app\push\controller;

use Workerman\Worker;
use app\common\controller\Frontend;
use GatewayWorker\Lib\Gateway;class Events extends Frontend
{

    /**
     * 有消息时
     * @param integer $client_id 连接的客户端
     * @param mixed $message
     * @return void
     */
    public static function onMessage($client_id, $message)
    {

        //$uid = 1;
        //Gateway::bindUid($client_id, $uid);  //与用户id绑定
    
        dump($message); //在sell控制台可查看到打印的内容
        //把接收到的消息原样返回
        Gateway::sendToClient($client_id, $message);

    

    }


    /**
     * 当用户连接时触发的方法
     * @param integer $client_id 连接的客户端
     * @return void
     */
    public static function onConnect($client_id)
    {
        echo '连接成功' . PHP_EOL;
        Gateway::sendToClient($client_id, '连接成功');
    }

    /**
     * 当用户断开连接时触发的方法
     * @param integer $client_id 断开连接的客户端
     * @return void
     */
    public static function onClose($client_id)
    {
        echo '断开连接' . PHP_EOL;
        Gateway::sendToClient($client_id, "断开连接");

//        Gateway::sendToAll("client[$client_id] logout\n");
    }

    /**
     * 当进程启动时
     * @param integer $businessWorker 进程实例
     */
    public static function onWorkerStart($businessWorker)
    {
        echo '进程启动,进程id:' . $businessWorker->id . PHP_EOL;

    }

    /**
     * 当进程关闭时
     * @param integer $businessWorker 进程实例
     */
    public static function onWorkerStop($businessWorker)
    {
        echo '进程关闭,进程id:' . $businessWorker->id . PHP_EOL;

    }


}
复制代码

 

做完这些,便可以去sell控制台输入命令运行:

cd 到 public 目录下,然后:

php ./chat.php start

 

 

已启动完毕,可以使用在线的websocket测试工具试试,连的时候,是连接端口为:2501 这个。

 

报错信息都是在这个sell界面查看

posted @   贱贱丶  阅读(1322)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示