編程學(xué)習(xí)網(wǎng) > PHP技術(shù) > ThinkPHP框架 > tp6中swoole擴展websocket的使用
2020
06-23

tp6中swoole擴展websocket的使用

attachments-2020-06-tDHgkAjn5ef050f632ee5.png


相信不少人都已經(jīng)知道tp6.0已經(jīng)適配swoole.并推出think-swoole 3.0 ,這次就來介紹下tp6中swoole擴展websocket的使用。

Websocket 繼承與Http,進行websocket連接之前需要一次HTTP請求,如果當期地址支持websocket則返回101,然后進行連接。也就是說并不是服務(wù)支持websocket后,請求每個連接地址都可以進行websocket連接,而是需要預(yù)先適配才可以連接。

thinkphp6.0中新增的一項就是Event,websocket服務(wù)這塊依賴于Event,因此我們需要先創(chuàng)建一個Event listener

php think make:listener WebsocketTest

執(zhí)行過后,將會在app目錄下看到新增的目錄和文件

v2-b662c63a4a48f38bcce35185eacf7d28_720w.jpg


其中handle是用來處理事件。

參考如圖進行修改

class WebsocketTest
{
    public $websocket = null;
    /**
    * 注入容器管理類,從容器中取出Websocket類,或者也可以直接注入Websocket類,
    */
    public function __construct(Container $container)
    {
        $this->websocket = $container->make(Websocket::class);
    }

    /**
     * 事件監(jiān)聽處理
     *
     * @return mixed
     */
    public function handle($event)
    {
        //回復(fù)客戶端消息
        $this->websocket->emit("testcallback", ['aaaaa' => 1, 'getdata' => $event['asd']]);
        //不同于HTTP模式,這里可以進行多次發(fā)送
           $this->websocket->emit("testcallback", ['aaaaa' => 1, 'getdata' => $event['asd']]);
    }
}


Websocket和事件是如何關(guān)聯(lián)的呢?

打開config目錄找到swoole.php,修改其中配置信息

'websocket'  => [
        'enable'        => true,
        'handler'       => Handler::class,
        'parser'        => Parser::class,
        'ping_interval' => 25000,
        'ping_timeout'  => 60000,
        'room'          => [
            'type'  => 'table',
            'table' => [
                'room_rows'   => 4096,
                'room_size'   => 2048,
                'client_rows' => 8192,
                'client_size' => 2048,
            ],
            'redis' => [

            ],
        ],
        'listen'        => [
            'test' => \app\listener\WebsocketTest::class,  //這里將事件名稱和事件處理類進行注冊
        ],
        'subscribe'     => [],
    ],
    'rpc'        => [
        'server' => [
            'enable'   => false,
            'port'     => 9000,
            'services' => [
            ],
        ],
        'client' => [
        ],
    ],

接下來就是見證奇跡的時刻,啟動服務(wù),打開http://127.0.0.1:8882/demo.html 并打開控制臺,執(zhí)行如下代碼,就可以看到頁面打印出服務(wù)器反饋的信息


注意發(fā)送的數(shù)據(jù)內(nèi)容格式,demo中存在字段asd

socket.emit("test",{"asd":"我是內(nèi)容"})

v2-9b4238c772751484cc2b5d3ee699ecae_720w.jpg



掃碼二維碼 獲取免費視頻學(xué)習(xí)資料

Python編程學(xué)習(xí)

查 看2022高級編程視頻教程免費獲取