后端開發(fā):當GatewayWorker遇到ThinkPHP 5.0.11

最近在做畢業(yè)設(shè)計,兩個項目都遇到了使用websocket的需求,但不想與TP5分開??戳薚P5的官方文檔,有Workerman的組件,但是沒得GatewayWorker的使用方法。這里總結(jié)一下?。?/p>

步驟

  • 安裝TP5
    不管你是如何安裝TP5的,只要最后你能打開瀏覽器看到TP5的歡迎界面。

  • 安裝GatewayWorker
    方式有很多,推薦使用composer來安裝GatewayWorker。
    如果你的composer可以正常運行,請到你項目的根目錄執(zhí)行:
    composer require workerman/gateway-worker
    就可以安裝成功了。你可以在vendor目錄下看到workerman目錄。

  • 建立入口文件
    一般入口文件都是建立在public目錄的,這里的GatewayWorker入口文件也一樣。
    public目錄建立一個server.php文件,這個文件名字隨意取。
    文件里內(nèi)容如下:

#!/usr/bin/env php
<?php

define('APP_PATH', __DIR__ . '/../application/');
define('BIND_MODULE','push/Run');
// 加載框架引導(dǎo)文件
require __DIR__ . '/../thinkphp/start.php';

我相信你認真看是能懂的。
與一般的TP5入口文件一樣,只是在第5行配置了一個控制器綁定:綁定到了push模塊的Run控制器。

  • 建立Run控制器
    使用TP5自帶的命令行工具可以幫助你快速生成一個控制器:

    php think make:controller push/Run

    執(zhí)行了上述指令,會在application目錄下建立一個push/controller/Run.php文件。我們需要在此文件下做一些處理。

<?php

namespace app\push\controller;

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

class Run
{
    public function __construct()
    {

        // 初始化register
        new Register('text://0.0.0.0:1238');

        //初始化 bussinessWorker 進程
        $worker = new BusinessWorker();
        $worker->name = 'RoomBusinessWorker';
        $worker->count = 4;
        $worker->registerAddress = '127.0.0.1:1238';

        // 設(shè)置處理業(yè)務(wù)的類,此處制定Events的命名空間
        $worker->eventHandler = '\app\push\controller\Events';
        // 初始化 gateway 進程
        $gateway = new Gateway("websocket://0.0.0.0:8282");
        $gateway->name = 'RoomGateway';
        $gateway->count = 4;
        $gateway->lanIp = '127.0.0.1';
        $gateway->startPort = 2900;
        $gateway->registerAddress = '127.0.0.1:1238';

        // 運行所有Worker;
        Worker::runAll();
    }
}

與一般的gateway使用沒有任何區(qū)別,如果你不懂,請看官網(wǎng)文檔。

  • 建立Events.php文件

    在上述代碼中66行設(shè)置了事件類,我們需要去實現(xiàn)它。
    繼續(xù)使用TP5的命令行工具去建立文件:
    php think make:controller push/Events
    內(nèi)如如下:

<?php

namespace app\push\controller;

use GatewayWorker\Lib\Gateway;

class Events
{
    /**
     * 有消息時
     * @param integer $client_id 連接的客戶端
     * @param mixed $message
     * @return void
     */
    public static function onMessage($client_id, $message)
    {
        // debug
        echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']}  client_id:$client_id session:".json_encode($_SESSION)." onMessage:".$message."\n";
    }

    /**
     * 當用戶連接時觸發(fā)的方法
     * @param integer $client_id 連接的客戶端
     * @return void
     */
    public static function onConnect($client_id)
    {
        Gateway::sendToClient($client_id, "Your client_id is $client_id");
    }

    /**
     * 當用戶斷開連接時觸發(fā)的方法
     * @param integer $client_id 斷開連接的客戶端
     * @return void
     */
    public static function onClose($client_id)
    {
        Gateway::sendToAll("client[$client_id] logout\n");
    }

    /**
     * 當進程啟動時
     * @param integer $businessWorker 進程實例
     */
    public static function onWorkerStart($businessWorker)
    {
        echo "WorkerStart\n";
    }

    /**
     * 當進程關(guān)閉時
     * @param integer $businessWorker 進程實例
     */
    public static function onWorkerStop($businessWorker)
    {
        echo "WorkerStop\n";
    }
}

在此類型中可以使用TP5一些工具,比如模型!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息,讓PHP新手誤入歧途,傳播著錯誤的實踐和糟糕的代碼,這必須得到糾正...
    layjoy閱讀 21,833評論 7 118
  • 因為最近有個項目涉及到Socket通信,于是自己嘗試了一下搭建一個服務(wù)端WebSocket通信的項目,寫個筆記,能...
    JonsonHamilton閱讀 38,229評論 11 20
  • 昨天有報道說,一美少女又因看美景忘乎所以,搭上了正處花季的生命。據(jù)說在廣東佛山南海獅山蓮塘村的200畝玫瑰花田,被...
    補拙莫如勤LV閱讀 460評論 0 1
  • 今天的晨讀介紹的是《習慣的力量》這本書,提出了習慣回路的概念,其中介紹了用改變習慣回路中的慣常行為來改變壞習慣的方...
    齊漾閱讀 250評論 0 3

友情鏈接更多精彩內(nèi)容