您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)Netty中如何實(shí)現(xiàn)客戶端與服務(wù)器端的長連接,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Netty通過webSocket實(shí)現(xiàn)服務(wù)器與客戶端的長連接,Tomcat8,Spring,Netty提供了對(duì)websocket的支持,實(shí)現(xiàn)了真正意義上的長連接!
我們通過簡單的實(shí)現(xiàn),體驗(yàn)下這個(gè)長連接!
體驗(yàn)之前先說下Http與websocket的關(guān)系介紹:
Http是一個(gè)無狀態(tài)的,協(xié)作的響應(yīng)式鏈接,所謂的無狀態(tài)體現(xiàn)在服務(wù)器是無法追蹤到根消息來自哪個(gè)客戶端的,通過cookei,session的形式保存消息
在網(wǎng)頁聊天中,通過輪詢,commit的形式實(shí)現(xiàn)短時(shí)間的鏈接,這種通過重復(fù)建立鏈接的方式是效率較低,且最重要的是不能實(shí)時(shí)的,也就是準(zhǔn)實(shí)時(shí)性。
持續(xù)鏈接的方式,體現(xiàn)在當(dāng)服務(wù)器無結(jié)果返回時(shí),客戶端無法感知,對(duì)于資源,帶寬的浪費(fèi);
websocket實(shí)現(xiàn)了真正意義上的客戶端與服務(wù)器端的長連接,節(jié)省帶寬,而關(guān)注內(nèi)容本身
websocket:1--:雙向數(shù)據(jù)傳遞
2--:基于Http
3--:非瀏覽器場(chǎng)合
下面我們通過程序的運(yùn)行體會(huì)一下!
建立server端!
我們發(fā)現(xiàn)無論是對(duì)Http的支持還是對(duì)socket連接,其建立運(yùn)行的方式都是一致的,在server端新增了handler(new LoggingHnadler),用于打印日志
綁定端口號(hào)8899,new InetSocketAddress等同于直接綁定8899
建立serverInnitializer
這里的ws解釋為websocketPath,即為請(qǐng)求時(shí)pathcoment
例如本次:ws://localhost:8899/ws
ws是指文末的ws,而開頭的ws是固定的websocket的書寫方式
其中HttpObjectAggregator是聚合處理,點(diǎn)進(jìn)去看一下
創(chuàng)建了一個(gè)示例,參數(shù)時(shí)max的文本長度,可聚合字節(jié),相當(dāng)于分段的理念
創(chuàng)建自己的handler
為了體驗(yàn)消息的實(shí)時(shí)性,用localdateTime.now()打印系統(tǒng)時(shí)間
這里我們看下asLongText的源碼
ChannelId繼承了serializable
其中asShortText為:返回一個(gè)短文本但不是唯一的一個(gè)channelId'
其中asLongText為:返回一個(gè)長文本但是唯一的一個(gè)channelId‘
websocket支持Html或第三方庫的運(yùn)行方式,我們寫一下頁面
一個(gè)發(fā)送數(shù)據(jù)的文本框,一個(gè)接收數(shù)據(jù)的文本框
js部分
我們先啟動(dòng)server端
再啟動(dòng)Html
當(dāng)鏈接打開時(shí),顯示了鏈接開啟!我們看下服務(wù)器端的變化
當(dāng)鏈接建立時(shí)調(diào)用handleradd方法,并且打印了類似UUID的字符串
我們發(fā)送數(shù)據(jù)體驗(yàn)一下
我們對(duì)比下除了正常相應(yīng)內(nèi)容以外,我們注意下時(shí)間
2019-01-20T13:09:14.322
2019-01-20T13:09:14.321
在毫秒級(jí)的偏差內(nèi)到達(dá)?。?!
我們打開開發(fā)者工具,刷新瀏覽器
與此同時(shí)服務(wù)器端變化:
test響應(yīng)碼200,沒什么好說的
我們?cè)倏聪聎s:
比較一下
除了響應(yīng)碼是特殊的101(Switching)以外,我們看到信息里還體現(xiàn)了幀(frame)
以及upgrade(提升):websocket
在這里體現(xiàn)了從Http提升到websocket的過程?。?!
準(zhǔn)備斷開
以上就是Netty中如何實(shí)現(xiàn)客戶端與服務(wù)器端的長連接,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。