swoole websocket

一、websocket介紹

1.1、websocket是什么呢?

websocket是一個(gè)協(xié)議,它僅僅就是一個(gè)協(xié)議而已,跟我們所了解的http協(xié)議、https協(xié)議、ftp協(xié)議等等一樣,都是一種單純的協(xié)議。

1.2、websocket的特點(diǎn)呢?

相對(duì)于Http這種非持久連接而言,websocket協(xié)議是一種持久化連接,它是一種獨(dú)立的,基于TCP的協(xié)議?;趙ebsocket,我們可以實(shí)現(xiàn)客戶(hù)端和服務(wù)端雙向通信。

在websocket出現(xiàn)之前,為了解決此類(lèi)問(wèn)題,常用的解決方法有輪詢(xún)和long pull,這兩種技術(shù)都是客戶(hù)端和服務(wù)端建立源源不斷的HTTP連接,非常消耗帶寬和服務(wù)器資源。

websocket是雙向持久連接,客戶(hù)端和服務(wù)端只需要第一次建立連接即可實(shí)現(xiàn)雙向通信。

二、Swoole_websocket簡(jiǎn)介

Swoole增加了內(nèi)置的WebSocket服務(wù)器支持,通過(guò)幾行PHP代碼就可以寫(xiě)出一個(gè)異步非阻塞多進(jìn)程的WebSocket服務(wù)器。


onOpen


WebSocket客戶(hù)端與服務(wù)器建立連接并完成握手后會(huì)回調(diào)此函數(shù)。

$req 是一個(gè)Http請(qǐng)求對(duì)象,包含了客戶(hù)端發(fā)來(lái)的握手請(qǐng)求信息

onOpen事件函數(shù)中可以調(diào)用push向客戶(hù)端發(fā)送數(shù)據(jù)或者調(diào)用close關(guān)閉連接


onOpen事件回調(diào)是可選的




onMessage

當(dāng)服務(wù)器收到來(lái)自客戶(hù)端的數(shù)據(jù)幀時(shí)會(huì)回調(diào)此函數(shù)。


$frame 是swoole_websocket_frame對(duì)象,包含了客戶(hù)端發(fā)來(lái)的數(shù)據(jù)幀信息

onMessage回調(diào)必須被設(shè)置,未設(shè)置服務(wù)器將無(wú)法啟動(dòng)

$frame?

$frame 共有4個(gè)屬性,分別是:

$frame->fd,客戶(hù)端的socket_id,使用$server->push推送數(shù)據(jù)時(shí)需要用到。

$frame->data,數(shù)據(jù)內(nèi)容,可以是文本內(nèi)容也可以是二進(jìn)制數(shù)據(jù),可以通過(guò)opcode的值來(lái)判斷

$frame->opcode,WebSocket的OpCode類(lèi)型,可以參考WebSocket協(xié)議標(biāo)準(zhǔn)文檔

$frame->finish, 表示數(shù)據(jù)幀是否完整,一個(gè)WebSocket請(qǐng)求可能會(huì)分成多個(gè)數(shù)據(jù)幀進(jìn)行發(fā)送

Push方法

$fd 客戶(hù)端連接的ID,如果指定的$fd對(duì)應(yīng)的TCP連接并非websocket客戶(hù)端,將會(huì)發(fā)送失敗

$data 要發(fā)送的數(shù)據(jù)內(nèi)容向websocket客戶(hù)端連接推送數(shù)據(jù),長(zhǎng)度最大不得超過(guò)2M。

$data 如果是文本類(lèi)型,編碼格式必然是UTF-8,這是WebSocket協(xié)議規(guī)定的

$opcode,指定發(fā)送數(shù)據(jù)內(nèi)容的格式,默認(rèn)為文本。發(fā)送其它格式可以參考文檔常量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是WebSocket呢? WebSocket是HTML5新增的一種通信協(xié)議,目標(biāo)主流的瀏覽器都支持這個(gè)協(xié)議,比...
    JunChow520閱讀 7,536評(píng)論 1 5
  • 三美人的背面,還是美人 畢竟是件連續(xù)殺人大案,市領(lǐng)導(dǎo)都十分重視,這耗了半個(gè)多月案子總算是破了,張京京手下的這幫人,...
    蘇小六Six閱讀 737評(píng)論 0 0
  • 周日去看了《一出好戲》。對(duì)于黃渤還是很喜歡,尤其喜歡他演的那些電影。對(duì)于此次黃渤自導(dǎo)自演的電影,自是有些期待,并且...
    綠希閱讀 1,042評(píng)論 2 3
  • 通向自習(xí)室的校道,突然冒出了許多盞路燈??赡芪疫@人不大注意,又近視,平時(shí)走路也只顧得上眼前一方窄窄的視野,要不是大...
    木縷縷閱讀 334評(píng)論 0 0
  • 往后余生,學(xué)會(huì)不在乎, 緣深緣淺,全部隨緣, 情濃情淡,絕不糾纏, 是聚是散,上天安排, 世間一切,順其自然。 看...
    月末北北閱讀 379評(píng)論 1 3

友情鏈接更多精彩內(nèi)容