使用Swoole服务搭建简易聊天室
前言:
之前寫過一篇關(guān)于swoole的安裝搭建的文章。也測試了搭建TCP協(xié)議的服務。但是今天我要介紹的是WebSocket協(xié)議,WebSoket協(xié)議的出現(xiàn),解決了http協(xié)議的很大的一個缺陷。那就是服務器端無法直接向客戶端或者說是瀏覽器端發(fā)送信息。而是要等待客戶端的請求,才能發(fā)送數(shù)據(jù)給他。要想達到實時數(shù)據(jù)更新的話,就不得不使用輪詢。但是輪詢其實非常的損耗性能,解決起來也不夠優(yōu)雅。
WebSocket基類介紹
之前有介紹過如何搭建Swoole服務,其實swoole的類的繼承,非常契合協(xié)議之間的關(guān)系。這里再次感嘆大神就是大神,寫的東西,簡單易懂又透露出高級感。
首先要講解下,通信協(xié)議的基礎
通信協(xié)議也就是說,WebSocke協(xié)議和http協(xié)議都是基于TCP的協(xié)議。也就是三次握手,來保證通信的成功和完整。
同樣的在swoole里面,有一個基類就是server類,還有兩個類分別是httpServer類和WebSoket類繼承子server類。就和他們之間網(wǎng)絡協(xié)議的關(guān)系一樣的。
也就是說server類中的屬性,方法,回調(diào)方法在webSocket類中都是被繼承,可以使用的
搭建一個WebSocket服務
這次我寫的這個服務,采用面向?qū)ο蟮男问絹韺?#xff0c;代碼讀起來會比較清晰。
那么我先簡單介紹下流程,因為里面很多方法的使用,在官網(wǎng)的手冊中已經(jīng)寫的很詳細了所以這里就不做過多的解釋了。只描述下流程
流程圖.png這里最關(guān)鍵的一步就是,將消息發(fā)給每個在線的客戶端。聊天室的關(guān)鍵其實就是,讓自己的發(fā)言,能讓別人看到,別的人發(fā)言,我也能看到。所以,我們需要websocket這樣的服務器主動發(fā)送消息給客戶端才可以辦到
客戶端部分
由于博主本身是搞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="發(fā)送" 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> 前端效果服務器終端效果
好了,今天就先寫到這里,如果有不對的地方希望獲得指點。關(guān)于swoole的文章我會持續(xù)更新。謝謝
以上
總結(jié)
以上是生活随笔為你收集整理的使用Swoole服务搭建简易聊天室的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS 强制换行和禁止换行强制换行 和禁
- 下一篇: PHP 数组函数分类和整理