轉(zhuǎn)載請注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路線不建議使用.

介紹

對于think-swoole網(wǎng)上資料五花八門,根據(jù)網(wǎng)上資料,我成功走上了岔" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > thinkphp6+swoole websocket使用教程自研路線不建議使用

thinkphp6+swoole websocket使用教程自研路線不建議使用

時間:2023-04-21 09:21:02 | 來源:網(wǎng)站運營

時間:2023-04-21 09:21:02 來源:網(wǎng)站運營

thinkphp6+swoole websocket使用教程自研路線不建議使用:?

轉(zhuǎn)載請注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路線不建議使用.

介紹

對于think-swoole網(wǎng)上資料五花八門,根據(jù)網(wǎng)上資料,我成功走上了岔路口,但是websocket連接時也可以走通,因為項目比較急,既然能走通那就直接用,也做成了滿足需求的聊天軟件,但是本著質(zhì)量至上的態(tài)度,我又把代碼改了一份正規(guī)的路線,下面分享我的自研路線,緊分享學(xué)習(xí)路程,不建議使用,正規(guī)路線在最下方。

安裝think-swoole

ThinkPHP 6 安裝命令

具體操作

config/swoole.php




?

復(fù)制一份think/swoole/websocket/socketio/Handler.php到app/http/Ywliveanchor.php

app/http/Ywliveanchor.php

<?php namespace app/http; use Swoole/Server;use Swoole/Websocket/Frame;use Swoole/WebSocket/Server as WebsocketServer;use think/Config;use think/Request;use think/swoole/contract/websocket/HandlerInterface; class Ywliveanchor implements HandlerInterface{ /** @var WebsocketServer */ protected $server; /** @var Config */ protected $config; public function __construct(Server $server, Config $config) { $this->server = $server; $this->config = $config; } /** * "onOpen" listener. * * @param int $fd * @param Request $request */ public function onOpen($fd, Request $request) { echo "隊列{$fd}連接/n"; } /** * "onMessage" listener. * only triggered when event handler not found * * @param Frame $frame * @return bool */ public function onMessage(Frame $frame) { $packet = $frame->data; if (Packet::getPayload($packet)) { return false; } $this->checkHeartbeat($frame->fd, $packet); return true; } /** * "onClose" listener. * * @param int $fd * @param int $reactorId */ public function onClose($fd, $reactorId) { return; } protected function checkHeartbeat($fd, $packet) { $packetLength = strlen($packet); $payload = ''; if ($isPing = Packet::isSocketType($packet, 'ping')) { $payload .= Packet::PONG; } if ($isPing && $packetLength > 1) { $payload .= substr($packet, 1, $packetLength - 1); } if ($isPing) { $this->server->push($fd, $payload); } }}


標(biāo)準(zhǔn)的websocket連接方式使用原生swoole處理即可

邏輯完成后

php think swoole


開啟多服務(wù)時報錯:swoole http server process is already running.

think/swoole/command/Server.php

注釋掉

// if ($pidManager->isRunning()) { // $this->output->writeln('<error>swoole http server process is already running.</error>'); // return; // }


示例邏輯

public function onMessage(Frame $frame) { /go(function ()use($frame) { $redis = new /Redis(); $redis->connect('127.0.0.1', 6379); $data=json_decode($frame->data); // var_dump($data); // if($data->con=='not_logged_in'){ // //未登錄 // //存儲房間信息 // $redis->sAdd('room'.$data->roominfo->id,$frame->fd); // $redis->set('fd_roominfo'.$frame->fd,json_encode($data->roominfo)); // }else if($data->con=='already_logged_in'){ // //已登錄存儲用戶信息 //1.提供user列表 $redis->set('fd_userinfo'.$frame->fd,json_encode($data));//fd綁定info消息 $redis->zAdd('user'.$data->roominfo->id,$frame->fd,json_encode($data));// 有序集合記錄房間info列表信息 $info=$redis->zRevRange('user'.$data->roominfo->id, 0, -1);//獲取房間info列表信息 //2.提供user單個信息 // $redis->set('fd_userinfo'.$frame->fd,json_encode($data->userinfo));//fd綁定userinfo // $userinfo=$redis->get('fd_userinfo'.$frame->fd); //存儲房間信息 $redis->set('fd_roominfo'.$frame->fd,json_encode($data->roominfo));//fd綁定房間 $redis->sAdd('room'.$data->roominfo->id,$frame->fd);//無序集合記錄房間fd列表 $room=$redis->sMembers('room'.$data->roominfo->id);//獲取房間fd列表 var_dump($room); $res=array( 'open'=>'1', //'data'=>['con'=>'open','msg'=>'發(fā)送成功','count'=>count($room),'info'=>json_decode($userinfo)] 'data'=>['con'=>'open','msg'=>'發(fā)送成功','count'=>count($room),'info'=>$info] ); }elseif($data->con=='already_logged_out'){ $roominfo= json_decode($redis->get('fd_roominfo'.$frame->fd));//獲取房間信息 $redis->srem('room'.$roominfo->id,$frame->fd);//刪除房間信息 $room=$redis->sMembers('room'.$roominfo->id); //獲取房間fd列表 var_dump($room); //1.提供user列表 $data=$redis->get('fd_userinfo'.$frame->fd);//獲取關(guān)閉用戶的info信息 // var_dump($data); $a=$redis->zRem('user'.$roominfo->id,$data); // var_dump($a); $info=$redis->zRevRange('user'.$roominfo->id, 0, -1); $redis->del('fd_userinfo'.$frame->fd);//移除房間用戶 // var_dump($info); //2.提供user單個信息 // $userinfo=$redis->get('fd_userinfo'.$frame->fd); // $redis->del('fd_userinfo'.$frame->fd); $res=array( 'open'=>'1', //'data'=>['con'=>'close',"count"=>count($room),'info'=>json_decode($userinfo)] 'data'=>['con'=>'close','msg'=>'發(fā)送成功','count'=>count($room),'info'=>$info] ); echo "隊列{$frame->fd}關(guān)閉1/n"; } /go(function ()use($res,$room) { $jsonStr = json_encode($res); foreach($room as $fd){ $this->server->push($fd, $jsonStr); } }); }





正規(guī)方式

轉(zhuǎn)載請注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路線不建議使用.

?

關(guān)鍵詞:使用,路線,建議,教程

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉