真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Think-Swoole之WebSocket有什么用-創(chuàng)新互聯(lián)

這篇文章主要介紹了Think-Swoole之WebSocket有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

什么是 WebSocket

WebSocket 協(xié)議是基于 TCP 的一種新的網(wǎng)絡(luò)協(xié)議,使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

為什么需要 WebSocket

因為 HTTP 的通信只能由客戶端發(fā)起。

WebSocket有哪些特點

  • 建立在TCP協(xié)議之上的

  • 性能開銷小,通信高效

  • 客戶端可以與任意的服務(wù)器進行通信

  • 協(xié)議標識:ws、wss

  • 持久化網(wǎng)絡(luò)通信協(xié)議

WebSocket 使用場景

社交聊天、彈幕、多玩家游戲、協(xié)同編輯、股票基金實時報價、體育實況更新、視頻會議聊天、基于位置的應(yīng)用、在線教育等需要高實時性的運用場景。

在 WebSocket 之前,傳統(tǒng)方式我們想要做聊天程序,可能會使用 JavaScript 定時器,每隔一秒鐘發(fā)送一次 HTTP 請求到服務(wù)器,查詢有沒有新消息。

有了 WebSocket ,客戶端通過瀏覽器以 HTTP 方式向服務(wù)端發(fā)送 WebSocket 連接請求,然后服務(wù)器發(fā)出回應(yīng),這個過程通常稱為“握手” 。瀏覽器和服務(wù)器只需要做一個握手的動作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道,將協(xié)議升級為 WebSocket,有新消息的話,服務(wù)端主動將消息推送給客戶端。

SocketIO 又是什么

WebSocket 是 HTML5 新提出的規(guī)范,雖然主流瀏覽器都已經(jīng)支持,但仍然可能有不兼容的情況,為了兼容所有瀏覽器,給程序員提供一致的編程體驗, SocketIO 將 WebSocket 、AJAX 和其它的通信方式全部封裝成了統(tǒng)一的通信接口,也就是說,我們在使用 SocketIO 時,不用擔心兼容問題,底層會自動選用很好的通信方式。因此說,WebSocket 是 SocketIO 的一個子集,Think-Swoole 中是按照 SocketIO 進行解析發(fā)送到服務(wù)端的數(shù)據(jù)。

在 ThinkPHP 6 中開啟 WebSocket 服務(wù)

1、配置文件 config/swoole.php 中“websocket. enable”設(shè)置為 true。

2、創(chuàng)建監(jiān)聽事件,創(chuàng)建WsConnect、WsClose、WsTest(這個可任意命名,和客戶端須對應(yīng)起來),在項目根目錄分別輸入如下命令:

php think make:listener WsConnect
php think make:listener WsClose
php think make:listener WsTest

app/listener 目錄下會生成剛才創(chuàng)建的監(jiān)聽類文件,在對應(yīng)的事件類中可寫入業(yè)務(wù)邏輯。我們這里先打印 $event 這個變量。Connect 事件中的 $event 是 app\Request 請求對象,Test自定義消息接收事件的 $event 是客戶端發(fā)送過來的消息。

3、在 app/event.php 中的數(shù)組 listen 鍵中定義事件監(jiān)聽類:

app/event.php
'listen'    => [
        'AppInit'  => [],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
        //監(jiān)聽連接,swoole 事件必須以 swoole 開頭
        'swoole.websocket.Connect' => [
            app\listener\WsConnect::class
        ],
        //監(jiān)聽關(guān)閉
        'swoole.websocket.Close' => [
            \app\listener\WsClose::class
        ],
        //監(jiān)聽 Test 場景
        'swoole.websocket.Test' => [
            \app\listener\WsTest::class
        ],
    ],

swoole.websocket.Connect:客戶端與服務(wù)器建立連接并完成握手事件,即 Swoole 中的 onOpen 事件。在這里記錄你自己程序用戶與客戶端的連接ID(fd)等。非必須,建議定義。

swoole.websocket.Close:客戶端連接關(guān)閉事件,非必須。

swoole.websocket.Test:自定義的 Test 事件;用于接收客戶端發(fā)送的 test 事件的消息。一個項目中可以定義多個 Test 事件,例如聊天、定位、客服功能事件,則可對應(yīng)為 Test1、Test2、Test3等。

WebSocket 的事件也可以在 config/swoole.php 配置文件的“websocket. listen”進行配置:

'listen' => [
    // 首字母大小寫都可以;值應(yīng)該是字符串非數(shù)組
    'connect' => 'app\listener\WsConnect',
    'close'   => 'app\listener\WsClose',
    'test'    => 'app\listener\WsTest'
],

4、項目根目錄開啟服務(wù):php think swoole start 即可,底層會自動判斷當前請求是 HTTP 還是 WebSocket。

客戶端與服務(wù)端建立連接

現(xiàn)在我們做一個 HTML 頁面,通過 HTML5 WebSocket 向我們的服務(wù)器端建立連接。在任意地方新建 test.html,內(nèi)容如下:




    
    Document



消息:
接收者:
發(fā)送


HTML5 WebSocket 有關(guān)介紹,可以訪問這里進行學習。

前端代碼中 var ws = new WebSocket("ws://127.0.0.1:9501/"); 我的服務(wù)器是在本地,swoole.php 配置文件中配置的端口號是 9501,所以訪問127.0.0.1:9501,ws 是 WebSocket 協(xié)議,與 HTTP、HTTPS 一樣,它有 WS 和 WSS 協(xié)議。ws.onmessage 可以接受消息。

接下來通過瀏覽器訪問這個 HTML 頁面,并打開瀏覽器調(diào)試控制臺,可以看到連接成功的字樣,以及服務(wù)端打印出來的參數(shù):

Think-Swoole之WebSocket有什么用

然后我們在剛才創(chuàng)建的 HTML 頁面的輸入框中發(fā)送消息,控制臺中打印出了我們的信息:

Think-Swoole之WebSocket有什么用

Swoole 監(jiān)聽服務(wù)終端中,也收到了我們發(fā)送過來的消息:

Think-Swoole之WebSocket有什么用

這是因為我們在 app/listener/WsTest 打印了 $event 變量。

最后說明一下前端頁面中 ws.send(JSON.stringify(['test',{to:to,message:message}])); 這段代碼,JSON.stringify() 的作用是將 JavaScript 對象轉(zhuǎn)換為 JSON 字符串,to 和 message 屬性是我們自定義的,test 是后端定義的 Test 事件,這個名稱一定和后端對應(yīng)起來。由于think-swoole中是按照 SocketIO 進行解析發(fā)送過來的數(shù)據(jù),所以你發(fā)送的數(shù)據(jù)應(yīng)該是 “[‘事件名’, 真正要發(fā)送的數(shù)據(jù)]” 的字符串形式:第一個參數(shù)的 test 就是對應(yīng)服務(wù)器端的Test 事件,用于區(qū)分更多場景的實時通信邏輯業(yè)務(wù);第二個參數(shù)才是你真正發(fā)送的數(shù)據(jù),可以是字符串、數(shù)據(jù)、對象,服務(wù)器端 $event 參數(shù)獲取的就是它。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Think-Swoole之WebSocket有什么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!


分享題目:Think-Swoole之WebSocket有什么用-創(chuàng)新互聯(lián)
文章地址:http://weahome.cn/article/dpoogs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部