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 @ 2020-07-04 14:53  贱贱丶  阅读(1136)  评论(0编辑  收藏  举报