Spring Boot WebSocket:編碼分析

前言:

?在上一篇文章中講到了WebSocket的原理击你,這節(jié)中我們先簡(jiǎn)單的編碼分析下,這樣有助于在之后的實(shí)戰(zhàn)編碼丸边。

說明:

(1)編碼中使用的Spring Boot版本是:1.5.8烛恤;

(2) 使用WebSocket有兩種方式: 第一種方式使用socketJS岛宦, 第二種方式是使用H5的標(biāo)準(zhǔn)阱佛。實(shí)例中使用的是第二種方式帖汞;

(3)最后提供源代碼;


編碼分析:

?在例子中凑术,我們需要編寫兩端的代碼:服務(wù)端和客戶端(當(dāng)然代碼都在一個(gè)工程里)翩蘸。

(1)Client:客戶端說明

?客戶端的代碼主要是使用H5的WebSocket進(jìn)行實(shí)現(xiàn),在前端網(wǎng)頁(yè)中使用WebSocket進(jìn)行連接服務(wù)端淮逊,然后建立Socket連接進(jìn)行通訊催首。

(2)Server:服務(wù)端說明

?服務(wù)端主要是建立多個(gè)客戶端的關(guān)系,進(jìn)行消息的中轉(zhuǎn)等泄鹏±扇危客戶端成功連接到服務(wù)端之后,就可以通過建立的通道進(jìn)行發(fā)送消息到服務(wù)端备籽,服務(wù)端接收到消息之后在群發(fā)給所有的客戶端舶治。

(3)客戶端和服務(wù)端怎么連接?

?客戶端通過JS中的WebSocket對(duì)象進(jìn)行連接到服務(wù)端:

? ? ? ?服務(wù)端映射出在上面使用的/websocket?端點(diǎn)呢车猬,使用注解@ServerEndpoint即可:

? ? ? ?當(dāng)客服端有連接請(qǐng)求了歼疮,服務(wù)端怎么接收請(qǐng)求,使用注解@OnOpen即可:

(4)客戶端和服務(wù)端怎么發(fā)送消息诈唬?

?客戶端可以使用webSocket提供的send()方法,如下代碼:

? ? ? ?服務(wù)端怎么發(fā)送消息呢缩麸?主要是使用在成功建立連接的時(shí)候铸磅,創(chuàng)建的Session對(duì)象進(jìn)行發(fā)送,如下代碼:

(5)客戶端和服務(wù)端怎么接收消息杭朱?

?客戶端接收消息消息使用的是websocket的onmessage回調(diào)方法阅仔,如下代碼:

? ? ? ?服務(wù)端怎么接收到消息,使用注解@OnMessage弧械,如下代碼:

(6)客戶端和服務(wù)端關(guān)閉連接處理八酒?

?客戶端使用websocket.close()進(jìn)行關(guān)閉連接;

?服務(wù)端使用@OnClose注解監(jiān)聽客戶端的關(guān)閉動(dòng)作刃唐。

(7)客戶端和服務(wù)端異常處理羞迷?

?客戶端當(dāng)有異常信息的時(shí)候會(huì)回調(diào)方法:websocket.onerror界轩;

?服務(wù)端使用@OnError注解監(jiān)聽異常信息。

(8)群聊原理(群發(fā)消息)

?服務(wù)端在和客戶端建立連接的時(shí)候衔瓮,會(huì)創(chuàng)建一個(gè)webSocket對(duì)象浊猾,我們會(huì)將每個(gè)連接創(chuàng)建的對(duì)象進(jìn)行報(bào)錯(cuò)到一個(gè)列表中,比如:CopyOnWriteArraySet(這是線程安全的)热鞍;在要進(jìn)行群發(fā)的時(shí)候葫慎,編寫我們的列表對(duì)象進(jìn)行群發(fā)消息。

(9)單聊原理(一對(duì)一消息)

?單聊的時(shí)候薇宠,就無需遍歷列表偷办,而是需要知道發(fā)送者和接受者各自的Session對(duì)象,這個(gè)Session對(duì)象怎么獲取呢澄港?Session可以獲取到sessionId椒涯,發(fā)送者在發(fā)送消息的時(shí)候,攜帶接收消息的sessionId慢睡,那么問題就演變成了:發(fā)送者怎么知道接受者的sessionId逐工,那就是加入一個(gè)在線用戶列表即可,在線用戶列表中有用戶的基本信息漂辐,包括sessionId泪喊。

?明白了這些,在接下里的編碼中就會(huì)輕松很多髓涯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袒啼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纬纪,更是在濱河造成了極大的恐慌蚓再,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件包各,死亡現(xiàn)場(chǎng)離奇詭異摘仅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)问畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門娃属,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人护姆,你說我怎么就攤上這事矾端。” “怎么了卵皂?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秩铆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我灯变,道長(zhǎng)殴玛,這世上最難降的妖魔是什么捅膘? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮族阅,結(jié)果婚禮上篓跛,老公的妹妹穿的比我還像新娘。我一直安慰自己坦刀,他們只是感情好愧沟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲤遥,像睡著了一般沐寺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盖奈,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天混坞,我揣著相機(jī)與錄音,去河邊找鬼钢坦。 笑死究孕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爹凹。 我是一名探鬼主播厨诸,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼禾酱!你這毒婦竟也來了微酬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤颤陶,失蹤者是張志新(化名)和其女友劉穎颗管,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滓走,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垦江,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搅方。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疫粥。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腰懂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情项秉,我是刑警寧澤绣溜,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站娄蔼,受9級(jí)特大地震影響怖喻,放射性物質(zhì)發(fā)生泄漏底哗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一锚沸、第九天 我趴在偏房一處隱蔽的房頂上張望跋选。 院中可真熱鬧,春花似錦哗蜈、人聲如沸前标。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)炼列。三九已至,卻和暖如春音比,著一層夾襖步出監(jiān)牢的瞬間俭尖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工洞翩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稽犁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓骚亿,卻偏偏與公主長(zhǎng)得像已亥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子循未,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSo...
    敢夢(mèng)敢當(dāng)閱讀 8,911評(píng)論 0 50
  • 集成 websocket 的四種方案 1. 原生注解 pom.xml WebSocketConfig 說明: 這個(gè)...
    KiwiFly閱讀 855評(píng)論 0 5
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,761評(píng)論 0 15
  • 小樂天成長(zhǎng)記 一陷猫、知音 龍龍情感充沛,能量滿滿的妖,思維活躍绣檬,表達(dá)夸張,總逗得小文笑的能量爆棚嫂粟。他們一唱一和娇未,一個(gè)表達(dá)...
    清曉溪閱讀 196評(píng)論 0 1
  • 我有一個(gè)姐姐,雖然星虹,在父母眼里零抬,姐姐特別調(diào)皮,不聽話宽涌,常常讓父母捶胸頓足平夜,并且,時(shí)不時(shí)捏捏我的小臉蛋卸亮,小胖手和小胖...
    悅糖糖閱讀 763評(píng)論 0 6