相信不少人都已經(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目錄下看到新增的目錄和文件
其中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)容"})
掃碼二維碼 獲取免費視頻學(xué)習(xí)資料
- 本文固定鏈接: http://www.wangchenghua.com/post/7420/
- 轉(zhuǎn)載請注明:轉(zhuǎn)載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料
查 看2022高級編程視頻教程免費獲取