日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Swoole服务搭建简易聊天室

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Swoole服务搭建简易聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

之前寫過一篇關于swoole的安裝搭建的文章。也測試了搭建TCP協議的服務。但是今天我要介紹的是WebSocket協議,WebSoket協議的出現,解決了http協議的很大的一個缺陷。那就是服務器端無法直接向客戶端或者說是瀏覽器端發送信息。而是要等待客戶端的請求,才能發送數據給他。要想達到實時數據更新的話,就不得不使用輪詢。但是輪詢其實非常的損耗性能,解決起來也不夠優雅。

WebSocket基類介紹

之前有介紹過如何搭建Swoole服務,其實swoole的類的繼承,非常契合協議之間的關系。這里再次感嘆大神就是大神,寫的東西,簡單易懂又透露出高級感。

首先要講解下,通信協議的基礎

通信協議

也就是說,WebSocke協議和http協議都是基于TCP的協議。也就是三次握手,來保證通信的成功和完整。
同樣的在swoole里面,有一個基類就是server類,還有兩個類分別是httpServer類和WebSoket類繼承子server類。就和他們之間網絡協議的關系一樣的。

也就是說server類中的屬性,方法,回調方法在webSocket類中都是被繼承,可以使用的

搭建一個WebSocket服務

這次我寫的這個服務,采用面向對象的形式來寫,代碼讀起來會比較清晰。

  • 我們創建一個聊天室類
  • class Chat {const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的訪問const PART = 81;//端口號private $server = null;//單例存放websocket_server對象private $connectList = [];//客戶端的id集合 }
  • 根據手冊了解到,我們需要調用websocket對象上的on方法來監聽事件,并且書寫回調函數。我們將這一部分代碼寫到構造函數中去,也就是在實例化對象的時候,就開啟服務
  • public function __construct(){//實例化swoole_websocket_server并存儲在我們Chat類中的屬性上,達到單例的設計$this->server = new swoole_websocket_server(self::HOST, self::PART);//監聽連接事件$this->server->on('open', [$this, 'onOpen']);//監聽接收消息事件$this->server->on('message', [$this, 'onMessage']);//監聽關閉事件$this->server->on('close', [$this, 'onClose']);//設置允許訪問靜態文件$this->server->set(['document_root' => '/grx/swoole/public',//這里傳入靜態文件的目錄'enable_static_handler' => true//允許訪問靜態文件]);//開啟服務$this->server->start();}
  • 剛才說了,這里不光要監聽事件,還要編寫回調方法。讓事件被觸發的時候,調用這個方法
  • /*** 連接成功回調函數* @param $server* @param $request*/public function onOpen($server, $request){echo $request->fd . '連接了' . PHP_EOL;//打印到我們終端$this->connectList[] = $request->fd;//將請求對象上的fd,也就是客戶端的唯一標識,可以把它理解為客戶端id,存入集合中}/*** 接收到信息的回調函數* @param $server* @param $frame*/public function onMessage($server, $frame){echo $frame->fd . '來了,說:' . $frame->data . PHP_EOL;//打印到我們終端//將這個用戶的信息存入集合foreach ($this->connectList as $fd) {//遍歷客戶端的集合,拿到每個在線的客戶端id//將客戶端發來的消息,推送給所有用戶,也可以叫廣播給所有在線客戶端$server->push($fd, json_encode(['no' => $frame->fd, 'msg' => $frame->data]));}}/*** 斷開連接回調函數* @param $server* @param $fd*/public function onClose($server, $fd){echo $fd . '走了' . PHP_EOL;//打印到我們終端$this->connectList = array_diff($this->connectList, [$fd]);//將斷開了的客戶端id,清除出集合}
  • 當還有最后的一步,就是實例化我們聊天室類
  • $obj = new Chat();

    那么我先簡單介紹下流程,因為里面很多方法的使用,在官網的手冊中已經寫的很詳細了所以這里就不做過多的解釋了。只描述下流程

    流程圖.png

    這里最關鍵的一步就是,將消息發給每個在線的客戶端。聊天室的關鍵其實就是,讓自己的發言,能讓別人看到,別的人發言,我也能看到。所以,我們需要websocket這樣的服務器主動發送消息給客戶端才可以辦到

    客戶端部分

    由于博主本身是搞php后端的,前端只是略懂,加之在公司都是前后端分離,很久沒寫前端代碼了。大家看看就好,我就不過多介紹了

    <!doctype html><html><head><meta charset="utf-8"><title>色情聊天室</title><script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script></head><body><textarea class="log" style="width: 100%; height: 500px;">=======色情聊天室======</textarea><input type="button" value="連接" onClick="link()"><input type="button" value="斷開" onClick="dis()"><input type="text" id="text"><input type="button" value="發送" onClick="send()"><script>function link(){var url='ws://gongruixiang.club:81';socket=new WebSocket(url);socket.onopen=function(){log1('連接成功')}socket.onmessage=function(msg){log(msg.data);console.log(msg);}socket.onclose=function(){log1('斷開連接')}}function dis(){socket.close();socket=null;}function log1(var1) {$('.log').append(var1+'\r\n');}function log(var1){var v=$.parseJSON(var1)$('.log').append('用戶'+v['no']+'說:'+v['msg']+'\r\n');}function send(){var text=$('#text').val();socket.send(text);}function send2(){var json = JSON.stringify({'type':'php','msg':$('#text2').attr('value')})socket.send(json);}</script></body></html> 前端效果
    服務器終端效果

    好了,今天就先寫到這里,如果有不對的地方希望獲得指點。關于swoole的文章我會持續更新。謝謝

    以上

    總結

    以上是生活随笔為你收集整理的使用Swoole服务搭建简易聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本美女逼 | 国产无遮挡免费观看视频网站 | 爱久久| 欧美少妇xxxxx | 亚洲做受高潮无遮挡 | 伊人超碰 | 免费午夜av | 一区在线不卡 | 人妻丰满熟妇av无码区不卡 | 97精品在线观看 | 日本精品久久久久久久 | 精品亚洲国产成av人片传媒 | 高清中文字幕av | 97超碰碰| 成人激情视频在线播放 | 日日躁夜夜躁狠狠久久av | 亚洲无遮挡 | 日韩av在线一区二区三区 | 中文婷婷 | 国产视频在线免费观看 | 欧美日韩免费网站 | 青青草精品| 日韩中文字幕高清 | 一区二区三区日本视频 | 亚洲女优在线 | 最新中文av | 国产黄色片免费观看 | 国产靠逼视频 | 草草影院在线播放 | 午夜精品美女久久久久av福利 | 日本一区二区三区四区在线观看 | 亚洲人妻一区二区三区 | 999国产| 丰满大乳露双乳呻吟 | 精品欧美视频 | 极品av在线 | 亚洲成年人在线 | 激情噜噜 | 一本亚洲 | 一区二区三区不卡视频在线观看 | 在线看av的网址 | 风韵少妇性饥渴推油按摩视频 | 国产精品一区二区三区四区在线观看 | 国产伦精品一区二区三区视频黑人 | 中文字幕第五页 | 国产午夜一级 | 色网在线免费观看 | 亚洲午夜18毛片在线看 | 国产高潮白浆 | 一区二区三区有限公司 | √资源天堂中文在线 | 在线手机av | 一区二区三区四区av | 人妻体内射精一区二区三区 | 一本到在线 | 免费福利av | 天天爽夜夜爽一区二区三区 | 无码人妻一区二区三区免费n鬼沢 | 午夜小影院 | av在线官网| 欧美人体视频一区二区三区 | 六月婷婷色 | 99久久99久久免费精品蜜臀 | 亚洲精品日韩在线观看 | 日本中文字幕在线不卡 | 无码精品一区二区三区AV | 久久精品国产亚洲AV无码男同 | 国产伊人久久 | 在线中文字幕播放 | 免费的av网站 | 天天色天天看 | 超碰在线小说 | 在线91av | 亚洲一区二区三区麻豆 | 亚洲成熟女性毛茸茸 | 国产91网 | 国产亚洲精品女人久久久久久 | 精品日韩在线 | 美女热逼 | 日韩女女同性aa女同 | 中文字幕avav | 国产a级黄色片 | 天天精品综合 | 韩国美女啪啪 | 男人操女人下面 | 欧美片网站yy | 91香蕉视频黄色 | 日本中文字幕在线观看 | 成人毛片观看 | 少妇搡bbbb搡bbb搡小说 | 在线观看你懂的视频 | 成人在线观看免费爱爱 | 四虎网站在线 | 狼人香蕉 | 精品福利在线 | 爆乳熟妇一区二区三区霸乳 | 91爱| 国产白嫩美女无套久久 | 双性尿奴穿贞c带憋尿 |