現(xiàn)在頁面實時聊天都使用Websocket技術(shù)實現(xiàn)嗎?
發(fā)布日期:2022/9/19 11:30:35 瀏覽量:
是的,現(xiàn)在實現(xiàn)頁面實時聊天主要使用Websocket,在此之前,還有其它的一些技術(shù),比如:AJAX 輪詢、Flash XMLSocket等。
其中Ajax輪詢就是定時向服務(wù)器發(fā)起請求,例如1秒鐘請求一次看有沒有最新的數(shù)據(jù),如果有就讀取渲染到頁面上來。這種方式需要消耗非常多的服務(wù)器資源,無法應(yīng)用于多人聊天的場景,而且還有一定的延遲,這是由于輪詢的間隔時間造成的。
另外Flash XMLSocket這種模式也已經(jīng)廢棄了,因為Flash事實上已經(jīng)退出歷史舞臺了,手機上不支持。
那就來說說主要的 WebSocket吧。
WebSocket是HTML5開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個握手的動作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
瀏覽器通過 JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請求,連接建立以后,客戶端和服務(wù)器端就可以通過 TCP 連接直接交換數(shù)據(jù)。當(dāng)你獲取 WebSocket 連接后,你可以通過 send() 方法來向服務(wù)器發(fā)送數(shù)據(jù),并通過 onmessage 事件來接收服務(wù)器返回的數(shù)據(jù)。
websocket的基本語法:
1. 創(chuàng)建實例
var Socket = new WebSocket(url, [ protocal ] )
以上代碼中的第一個參數(shù) url, 指定連接的 URL。第二個參數(shù) protocol 是可選的,指定了可接受的子協(xié)議。
2. websocket屬性
假定我們使用了以上代碼創(chuàng)建了 Socket 對象:
Socket.readyState
只讀屬性 readyState 表示連接狀態(tài),可以是以下值:
0 - 表示連接尚未建立。
1 - 表示連接已建立,可以進行通信。
2 - 表示連接正在進行關(guān)閉。
3 - 表示連接已經(jīng)關(guān)閉或者連接不能打開。
3. websocket事件
以下是 WebSocket 對象的相關(guān)事件。假定我們使用了以上代碼創(chuàng)建了 Socket 對象:
Open Socket.onopen 連接建立時觸發(fā)
Message Socket.onmessage 客戶端接收服務(wù)端數(shù)據(jù)時觸發(fā)
4. websocket方法
以下是 WebSocket 對象的相關(guān)方法。假定我們使用了以上代碼創(chuàng)建了 Socket 對象:
Socket.send() 使用連接發(fā)送數(shù)據(jù)
Socket.close() 關(guān)閉連接
一個完整的聊天系統(tǒng)是由三個部分組成的:
前端界面(在瀏覽器中輸入網(wǎng)址打開實時聊天系統(tǒng)界面,并使用Websoket連接到服務(wù)器)
后端Web服務(wù)器(為聊天系統(tǒng)界面提供Web服務(wù)器支持,一般使用80端口)
后端Websocket服務(wù)器(為Websocket實時信息傳遞提供長連接支持和數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù))
Websocket只是整個聊天系統(tǒng)的前端部分,簡易的代碼如下:
WebSocket實現(xiàn)實時聊天的基本用法大致就是這樣子的了, 如果要真正實現(xiàn)功能,還需要后端的支持。如果會Node.js那可以使用 nodejs-websocket模塊; 如果會PHP程序開發(fā),則可以選擇使用 Swoole框架,實現(xiàn)實時聊天也是非常強大的。
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生