使用Websocket實現訊息推送(上)

2022-09-06 15:12:10 字數 2061 閱讀 4977

聯絡客服功能在專案中非常難避免。一般有以下三種實現方式:

第一種方式,最low的。實現簡單。可是浪費使用者流量;另外一種方式,接入簡單,功能強大,可是可能須要一定的成本(比方付費);第三種方式,須要一定的開發成本(伺服器託管費用忽略)。

websocket一種在單個 tcp 連線上進行全雙工通訊的協議。

websocket通訊協議於2023年被ietf定為標準rfc 6455,並被rfc7936所補充規範,websocketapi被w3c定為標準。

websocket 是獨立的、建立在 tcp 上的協議。和 http 的唯一關聯是使用 http 協議的101狀態碼進行協議切換,使用的 tcp 埠是80。能夠用於繞過大多數防火牆的限制。

websocket 使得client和伺服器之間的資料交換變得更加簡單,同意服務端直接向client推送資料而不須要client進行請求,在 websocket api 中。瀏覽器和伺服器僅僅須要完畢一次握手,兩者之間就直接能夠建立永續性的連線,並同意資料進行雙向傳送。

眼下常見的瀏覽器如 chrome、ie、firefox、safari、opera 等都支援 websocket。同一時候須要服務端程式支援 websocket。

來自維基百科

websocket僅僅是一種協議,相似http,因此與語言無關。這裡我使用j**a來做服務端,同一時候提供android和html的client,通過乙個簡單的demo來介紹websocket的使用。接下來的一篇會對websocket進行分析。

這裡我使用 j**a-websocket 這個庫來實現 websocket server。

須要的jar包位於專案的/j**a-websocket/dist/j**a-websocket.jar位置。效果例如以下:

**例如以下:

public

class

socketserver

extends

websocketserver catch (unknownhostexception e)

inputstreamreader in = new inputstreamreader(system.in);

bufferedreader reader = new bufferedreader(in);

while (true) catch (exception e) }}

public

socketserver(int port)

public

socketserver(inetsocketaddress address)

@override

public

void

onopen(websocket websocket, clienthandshake clienthandshake)

@override

public

void

onclose(websocket websocket, int code, string reason, boolean remote)

@override

public

void

onmessage(websocket websocket, string msg)

@override

public

void

onerror(websocket websocket, exception e)

}e.printstacktrace();

}/**

* 廣播收到訊息

**@param msg

*/private

void

broadcastmessage(string msg) }}

private

static

void

print(string msg)

}

參考:

1. 2.

3.

使用nginx實現websocket的負載均衡

當web應用訪問量過大時,我們就需要做負載均衡,將同乙個網域名稱的請求分散到不同的伺服器上。nginx就可以做到。它可以按照輪詢 ip雜湊 url雜湊 權重等多種方式對後端伺服器做負載均衡。但是分配到不同的機器上後,如果請求是有狀態的,比如有些頁面需要使用者登入之後才能訪問,我們就需要保證單個使用者...

vue專案使用websocket實現資料實時推送

寫了乙個關於工程的專案,關於工地資料的實時監控 1.後端要先寫好資料,將資料傳遞給前端 2.在前端頁面 function else 連線發生錯誤的 方法 websocket.onerror function 連線成功建立的 方法 websocket.onopen function 接收到訊息的 方法...

WebSocket實現原理

websocket同http和https一樣,屬於tcp基礎上的應用層的協議 因此其必然也是存在三次握手四次揮手的過程 一般來說,我們使用的http協議只能由客戶端發起請求,而服務端無法直接主動進行資料推送,這就導致了如果服務端有持續的變化 如聊天室 而客戶端獲取起來較為複雜 如實時性和服務端壓力等...