tp5.1安裝和使用workerman


一、tp5.1安裝workerman

composer安裝:

composer require topthink/think-worker=2.0.*

二、使用

使用自定義類作為worker入口服務類

在config中創建worker_server.php

<?php

// +----------------------------------------------------------------------
// | Workerman設置 僅對 php think worker:server 指令有效
// +----------------------------------------------------------------------
return [
    'worker_class'   => 'app\index\controller\Worker', // 自定義Workerman服務類名 支持數組定義多個服務
];

控制器自定義服務類Worker.php

<?php

namespace app\index\controller;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Register;
use GatewayWorker\Gateway;

/**
 * 初始化gatewayWorker進程
 * Class Worker
 * @package app\index\controller
 */
class Worker
{
    public function __construct()
    {
        //初始化register進程
        new Register('text://0.0.0.0:1238');

        //初始化businessWorker進程
        $worker = new BusinessWorker();
        $worker->name = 'tuoyuyun';
        $worker->count = 4;
        $worker->registerAddress = '127.0.0.1:1238';
        $worker->eventHandler = 'app\index\controller\Events';//通信接收和發送類

        //初始化gateway進程
        $gateway = new Gateway('tcp://0.0.0.0:32769');//硬件通信ip和開放端口
        $gateway->name = 'gateway';
        $gateway->count = 4;
        $gateway->lanIp = '127.0.0.1';
        $gateway->startPort = 2900;
        $gateway->registerAddress = '127.0.0.1:1238';
    }
}

Events.php

<?php


namespace app\index\controller;

use Exception;
use \GatewayWorker\Lib\Gateway;

class Events
{
    /**
     * 當客戶端連接時觸發
     * 如果業務不需此回調可以刪除onConnect
     *
     * @param int $client_id 連接id
     * @throws Exception
     */
    public static function onConnect($client_id)
    {
        Gateway::sendToClient($client_id,'success');
    }

    /**
     * 當客戶端發來消息時觸發
     * @param int $client_id 連接id
     * @param mixed $message 具體消息
     * @throws Exception
     */
    public static function onMessage($client_id, $message)
    {
        //自定義業務處理
        $index = new Index();
        $porson = $index->onMessage($client_id,$message);
        $res = Gateway::isOnline($client_id);
        if ($res){
            Gateway::sendToClient($client_id,$porson);
        }
    }

    /**
     * 當用戶斷開連接時觸發
     * @param int $client_id 連接id
     * @throws Exception
     */
    public static function onClose($client_id)
    {
        Business::setState($client_id);
        // 向所有人發送
        GateWay::sendToAll("$client_id logout\r\n");
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM