TP5 集成 WorkerMan 以及 GatewayWorker 做實(shí)時(shí)聊天

一. 基礎(chǔ)

1. workerman

workerman是國人開發(fā)的良心高性能的PHP socket 服務(wù)器框架,在全球最大同性交友平臺(tái)gayHub的star都4K多,可以想象是多么的牛X。

可以單獨(dú)部署,也可以整合進(jìn)MVC的框架(TP,laravel等),可以說非常實(shí)用,并發(fā)效果也好。

官網(wǎng)地址:

gayhub地址:

2. gateway-worker

gateway-worker(后面直接稱gateway)是基于 workerman開發(fā)的TCP長(zhǎng)連接框架,用于快速開發(fā)TCP長(zhǎng)連接應(yīng)用。

在線聊天一般都是實(shí)用長(zhǎng)連接保持通信,使用 workerman雖然能夠做到同樣的效果,但是gateway更加的方便快捷。

(輪詢構(gòu)建的聊天室已經(jīng)OUT了,實(shí)在是太...)

gayhub地址:

3. gatewayClient

gateClient是用來輔助 workerman或者是gateway進(jìn)行用戶分組以及向用戶發(fā)送信息的組件,同時(shí),能夠快速便捷的將原有系統(tǒng)的uid和clientid綁定起來。

gayhub地址:

二. 安裝類庫

1. workerman

  • linux
composer require topthink/think-worker
  • WINDOWS
composer require workerman/workerman-for-win

如果用的是TP5.0.X 安裝的時(shí)候可能不成功,因?yàn)閏omposer默認(rèn)安裝的最新版,也就是workerm的2.0.X版,所以需要

composer require topthink/think-worker v1.0.1

加上對(duì)應(yīng)的版本號(hào)

2. gateway-worker

  • linux
composer require gateway-worker
  • WINDOWS
composer require gateway-worker-for-win

3. gatewayClient

composer require workerman/gatewayclient

三. 集成

  • workerman

主要做信息推送

TP5相關(guān)文檔:https://www.kancloud.cn/manual/thinkphp5/235128
具體操作

  1. 在項(xiàng)目根目錄新建server.php文件,文件內(nèi)容為:
<?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Worker');
// 加載框架引導(dǎo)文件
require __DIR__ . '/thinkphp/start.php';

2.在項(xiàng)目下的application里新建push文件夾
3.在新建的push文件夾下面新建controller文件夾,目錄結(jié)構(gòu)為\application\push\controller
4.在剛才的controller文件夾下面新建Worker.php文件,內(nèi)容為:

<?php

namespace app\push\controller;

use think\worker\Server;

class Worker extends Server
{
    protected $socket = 'websocket://0.0.0.0:2346';

    /**
     * 收到信息
     * @param $connection
     * @param $data
     */
    public function onMessage($connection, $data)
    {
        $connection->send('我收到你的信息了');
    }

    /**
     * 當(dāng)連接建立時(shí)觸發(fā)的回調(diào)函數(shù)
     * @param $connection
     */
    public function onConnect($connection)
    {
        $connection->send('正在連接');
    }

    /**
     * 當(dāng)連接斷開時(shí)觸發(fā)的回調(diào)函數(shù)
     * @param $connection
     */
    public function onClose($connection)
    {
        $connection->send('連接關(guān)閉');
        $connection->close();
    }

    /**
     * 當(dāng)客戶端的連接上發(fā)生錯(cuò)誤時(shí)觸發(fā)
     * @param $connection
     * @param $code
     * @param $msg
     */
    public function onError($connection, $code, $msg)
    {
        echo "error $code $msg\n";
    }

    /**
     * 每個(gè)進(jìn)程啟動(dòng)
     * @param $worker
     */
    public function onWorkerStart($worker)
    {

    }
}

5.上面都弄好后,就可以到項(xiàng)目目錄里,啟動(dòng)監(jiān)聽服務(wù)

php server.php

6.運(yùn)行成功后會(huì)出現(xiàn)類型于下圖,如果報(bào)錯(cuò)可能是防火墻或端口沒開放等,具體問題具體分析


image

7.客戶端可以連接方式

ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
   alert("連接成功");
   ws.send('tom');
   alert("給服務(wù)端發(fā)送一個(gè)字符串:tom");
};
ws.onmessage = function(e) {
   alert("收到服務(wù)端的消息:" + e.data);
};
  • gateway-worker

主要做單聊,群聊和廣播

由于通過composer安裝時(shí)只下載了核心類,我們可以下載一些demo來進(jìn)行配置

  1. 去官網(wǎng)下載Windows版的gateway-worker,里面有demo。http://www.workerman.net/download
  2. 將下載的壓縮包解壓,將Applications/Yourapp中的文件全部復(fù)制到thinkphp5目錄application/push里面
  3. 將解壓后的文件夾中的start_for_win.bat復(fù)制到thinkphp5的根目錄,即與application同級(jí)的目錄
  4. 右鍵start_for_win.bat,點(diǎn)編輯,將里面的目錄改成自己的目錄,這里改為
php application\push\start_register.php application\push\start_gateway.php application\push\start_businessworker.php
Pause
  1. 保存退出。雙擊運(yùn)行。
  2. linux基本一至,但不用編輯start_for_win.bat文件,直接使用start.php文件
  3. 成功運(yùn)行后會(huì)出現(xiàn)如下圖


    image

via:https://blog.csdn.net/qq_14913213/article/details/77184074

客戶端連接成功后可以通過TP的MVC模式進(jìn)行發(fā)送信息

<?php
namespace app\index\controller;

use \GatewayClient\Gateway;

class Index
{   
    public function send(){
        //綁定端口
        Gateway::$registerAddress = '127.0.0.1:1238';
        // 監(jiān)查客戶端是否在線
        Gateway::isOnline('7f0000010b5400000002')
        // 給所有客戶端廣播信息
        Gateway::sendToAll("test\r\n");
    }
}

更多操作方法可以查看

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評(píng)論 25 709
  • 幸福=資產(chǎn)-支出-負(fù)債。 受苦,其實(shí)是在清除幸福的負(fù)債。很多人不愿意受苦。受點(diǎn)苦頭就抱怨命運(yùn)的不公、生活的不幸,由...
    afe887dcd382閱讀 1,606評(píng)論 1 12
  • 很久沒有寫點(diǎn)什么,偶爾靈感突現(xiàn),心中縱有千言萬語卻難于表述。從今日起,可每日寫個(gè)幾百字,不拘格式,不拘文體,不拘內(nèi)...
    取名不好取閱讀 179評(píng)論 0 0
  • 每個(gè)人心底,都潛藏著一種害怕被時(shí)代拋棄,害怕在日出月落中就悄無聲息變成窮人的恐懼」。這種恐懼會(huì)讓他們最終屈從于大眾...
    賣萌的葉子閱讀 150評(píng)論 0 0

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