十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天就跟大家聊聊有關(guān)PHP中怎么利用WebSocket實現(xiàn)一個在線聊天通訊系統(tǒng),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
我們提供的服務(wù)有:網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、徐水ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的徐水網(wǎng)站制作公司
新建WebSocket.php控制器:
(監(jiān)聽端口要確認(rèn)服務(wù)器放行,寶塔環(huán)境還需要添加安全組規(guī)則)
4, //設(shè)置啟動的Worker進(jìn)程數(shù) 'daemonize' => false, //守護(hù)進(jìn)程化(上線改為true) 'backlog' => 128, //Listen隊列長度 'dispatch_mode' => 2, //固定模式,保證同一個連接發(fā)來的數(shù)據(jù)只會被同一個worker處理 //心跳檢測:每60秒遍歷所有連接,強(qiáng)制關(guān)閉10分鐘內(nèi)沒有向服務(wù)器發(fā)送任何數(shù)據(jù)的連接 'heartbeat_check_interval' => 60, 'heartbeat_idle_time' => 600 ]; //建立連接時回調(diào)函數(shù) public function onOpen($server,$req) { $fd = $req->fd;//客戶端標(biāo)識 $uid = $req->get['uid'];//客戶端傳遞的用戶id $token = $req->get['token'];//客戶端傳遞的用戶登錄token //省略token驗證邏輯...... if (!$token) { $arr = array('status'=>2,'message'=>'token已過期'); $server->push($fd, json_encode($arr)); $server->close($fd); return; } //省略給用戶綁定fd邏輯...... echo "用戶{$uid}建立了連接,標(biāo)識為{$fd}\n"; } //接收數(shù)據(jù)時回調(diào)函數(shù) public function onMessage($server,$frame) { $fd = $frame->fd; $message = $frame->data; //省略通過fd查詢用戶uid邏輯...... $uid = 666; $data['uid'] = $uid; $data['message'] = '用戶'.$uid.'發(fā)送了:'.$message; $data['post_time'] = date("m/d H:i",time()); $arr = array('status'=>1,'message'=>'success','data'=>$data); //僅推送給當(dāng)前連接用戶 //$server->push($fd, json_encode($arr)); //推送給全部連接用戶 foreach($server->connections as $fd) { $server->push($fd, json_encode($arr)); } } //連接關(guān)閉時回調(diào)函數(shù) public function onClose($server,$fd) { echo "標(biāo)識{$fd}關(guān)閉了連接\n"; }}
前端演示頁面:
(省略控制器判斷登錄狀態(tài)、分配數(shù)據(jù)邏輯......)
退出
發(fā)送
服務(wù)器移到項目根目錄開啟服務(wù):
php public/index.php Websocket/start
這里的路徑,是因為我綁定了home模塊為默認(rèn)模塊,tp5默認(rèn)情況是:php public/index.php index/Websocket/start)
開啟成功,查看端口已經(jīng)被監(jiān)聽:
lsof -i:9501
看完上述內(nèi)容,你們對PHP中怎么利用WebSocket實現(xiàn)一個在線聊天通訊系統(tǒng)有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。