免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      SpringBoot整合websocket實現(xiàn)及時通信聊天

      SpringBoot整合websocket實現(xiàn)及時通信聊天

      文章目錄

      ??一、技術介紹

      線上演示地址: http://chat.breez.work

      實時通信 (Instant Messaging,簡稱IM)是一個 實時 通信系統(tǒng),允許兩人或多人使用網(wǎng)絡實時的傳遞 文字消息 、 文件 、 語音 與 視頻交流 。[4]

      場景再現(xiàn):

      • ??微信聊天
      • ??QQ聊天
      • ??網(wǎng)站在線客服

      ??1.1 客戶端WebSocket

      WebSocket 對象提供了用于創(chuàng)建和管理 WebSocket 連接,以及可以通過該連接 發(fā)送 和 接收數(shù)據(jù) 的 API。使用 WebSocket() 構造函數(shù)來構造一個 WebSocket。[1]

      構造函數(shù)如下所示:

      const webSocket = WebSocket(url[, protocols])

      例子如下:

      const webSocket = new WebSocket(“ws://42.193.120.86:3688/ws/小明/翠花”)

      ??1.1.1 函數(shù)

      1、 webSocket.send()

      該函數(shù)用于向服務端發(fā)送一條消息,例子如下:

      webSocket.send(“Hello server!”);

      2、 webSocket.close()

      該函數(shù)用于關閉客戶端與服務端的連接,例子如下:

      webSocket.close();

      ??1.1.2事件

      1、webSocket.onopen

      該事件用于監(jiān)聽客戶端與服務端的連接狀態(tài),如果客戶端與服務端 連接成功 則該事件觸發(fā),例子如下:

      webSocket.onopen = function(event) { console.log(“連接已經(jīng)建立,可以進行通信”);};

      2、webSocket.onclose

      如果服務端與客戶端連接斷開,那么此事件出發(fā),例子如下:

      webSocket.onclose = function(event) { console.log(“連接已經(jīng)關閉”);};

      3、webSocket: message event

      該事件用于監(jiān)聽服務端向客戶端發(fā)送的消息,例子如下:

      webSocket.addEventListener(‘message’, function (event) { console.log(‘來自服務端的消息:’, event.data);});

      4、webSocket:error event

      如果客戶端與服務端發(fā)生錯誤時,那么此事件將會觸發(fā),例子如下:

      webSocket.addEventListener(‘error’, function (event) { console.log(‘連接出現(xiàn)錯誤’, event);});

      ??1.2 服務端WebSocket

      @ServerEndpoint 用于聲明一個socket服務,例子如下:

      @ServerEndpoint(value = “/ws/{userId}/{targetId}”)

      幾個重要的 方法 注解:

      @OnOpen@OnClose@OnMessage@OnError

      ??二、實戰(zhàn)

      ??2.1、服務端

      ??2.1.1引入maven依賴

      org.springframework.boot spring-boot-starter-websocket

      ??2.1.2 編寫配置類

      @Configurationpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }}

      ??2.1.3 編寫WebSocketService服務類

      下面的 userId 代表 發(fā)送者 的ID號, target 代表 發(fā)送目標 ID號。

      @Component@ServerEndpoint(value = “/ws/{userId}/{target}”)public class WebSocketService { //用于保存連接的用戶信息 private static ConcurrentHashMap SESSION = new ConcurrentHashMap(); //原子遞增遞減,用于統(tǒng)計在線用戶數(shù) private static AtomicInteger count = new AtomicInteger(); //消息隊列,用于保存待發(fā)送的信息 private Queue queue = new LinkedBlockingDeque(); //onOpen() //onClose() //onMessage() //onError()}

      ??2.1.4 建立連接

      建立連接之前,判斷用戶是否已經(jīng)連接,如果沒有連接,那么將用戶session信息保存到集合,然后計數(shù)器遞增。

      @OnOpen public void onOpen(Session session, @PathParam(“userId”) String userId) { if (!SESSION.containsKey(userId)) { SESSION.put(userId, session); count.incrementAndGet(); } }

      ??2.1.5 關閉連接

      關閉連接的時候,將用戶session刪除和計數(shù)器遞減。

      @OnClose public void onClose(@PathParam(“userId”) String userId) { SESSION.remove(userId); count.decrementAndGet(); }

      ??2.1.6 發(fā)送消息

      發(fā)送采用的方法是: session.getBasicRemote().sendText(“你好”);

      @OnMessage public void onMessage(String message, @PathParam(“userId”) String userId, @PathParam(“target”) String target) throws IOException { queue.add(message); Session s = SESSION.get(target); if (s == null) { Session b = SESSION.get(userId); b.getBasicRemote().sendText(“對方不在線”); } else { for (int i = 0; i < queue.size(); i++) { String msg = queue.poll(); Message m = new Message(); m.setUserId(userId); s.getBasicRemote().sendText(msg); } } }

      ??2.1.7 監(jiān)聽錯誤

      出現(xiàn)錯誤,刪除用戶session信息和計數(shù)器遞減

      @OnError public void onError(Throwable error, @PathParam(“userId”) String userId) { SESSION.remove(userId); count.decrementAndGet(); error.printStackTrace(); }

      ??2.2 客戶端

      本案例中客戶端采用Nuxt編寫,相關代碼如下

      ??2.2.1 主頁面

      運行截圖如圖所示:

      歡迎使用喵喵號聊天 聊一下 body { background: url(‘../static/img/cat.jpg’); }

      ??2.2.1 聊天頁面

      運行截圖如下:

      小明

      翠花

      我的喵喵號:{{user.userId}} 對方喵喵號:{{user.targetId}} 清空消息 {{m.msg}} {{m.msg}} 系統(tǒng)消息:{{m.msg}} 發(fā)送

      ??三、開源地址

      • ??Gitee: https://gitee.com//websocket
      • 演示地址: http://chat.breez.work

      ??四、參考文獻

      • [1]MDN: WebSocket
      • [2]Nuxt: https://nuxtjs.org
      • [3]Vue: https://cn.vuejs.org
      • [4]百度百科: 及時通信

      ??收錄專欄:系統(tǒng)設計與實戰(zhàn)

      原文鏈接:https://blog.csdn.net/m0_54853420/article/details/125244263?utm_source=tuicool&utm_medium=referral

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月15日 18:27
      下一篇 2022年6月15日 18:27

      相關推薦

      • ios手游模擬器(手游模擬器ios)

        本文主要講的是ios手游模擬器,以及和手游模擬器ios相關的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 哪個iOS模擬器能多開手游賬號?可以推薦個好用的模擬器給我嗎…

        2022年11月27日
      • 短視頻策劃內(nèi)容的3個要點(短視頻策劃內(nèi)容怎么做)

        短視頻在制作時,內(nèi)容框架非常重要。如果直奔主題,然后結束,聚卓告訴你,這樣的短視頻已經(jīng)過時了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

        2022年11月27日
      • 美團第三季度實現(xiàn)營收626億元,即時配送訂單量增至50億筆

        新京報訊(記者秦勝南)11月25日,美團發(fā)布業(yè)績公告顯示,第三季度營收為626億元,較去年同比增長28.2%,凈利潤為12.2億元。第三季度,美團即時配送訂單數(shù)增長至50億筆。截至…

        2022年11月27日
      • 存儲過程語法(sql server存儲過程語法)

        今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

        2022年11月26日
      • 劉畊宏回應梅西輸球后哭了:跳操流汗到眼睛 剛好有點流鼻水

        11月23日,劉畊宏發(fā)言回應自己再梅西輸球后流淚的消息,他寫道:“我是有些難過… 然后…跳操流汗到眼睛,剛好有點流鼻水,阿根廷之后的比賽會贏的!”據(jù)悉,11月22日的世界杯比賽中,…

        2022年11月26日
      • 個人怎么做抖音帶貨(個人做抖音帶貨能賺錢嗎)

        抖音如今是大家很熟悉的短視頻平臺,不過現(xiàn)在的抖音卻不只是短視頻那么簡單,它的功能非常豐富,其中一個就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

        2022年11月25日
      • EDG粉絲酸了!JDG重磅官宣,頂級打野Kanavi留在LPL賽區(qū)

        2022英雄聯(lián)盟職業(yè)聯(lián)賽冬季轉會期已經(jīng)于11月22日拉開帷幕,在轉會期首日作為LPL觀眾關注的焦點的JDG戰(zhàn)隊,就官宣了Yagao離隊以及Homme續(xù)約的消息,這讓人十分意外。畢竟…

        2022年11月25日
      • 商家收到貨才會退款嗎(淘寶代付款退款錢到哪里了)

        在淘寶上有一些人下單購買商品的時候是通過代付的形式來支付的,一般情況下是家長幫助家里的小孩或者長輩進行代付,而代付訂單和普通的訂單沒有太大的區(qū)別,不過如果發(fā)生退款的話,錢是退到哪里…

        2022年11月25日
      • 小紅書平臺的一些機制及玩法詳解(小紅書玩法有哪些)

        關于小紅書 一:小紅書平臺的一些機制 1. 筆記內(nèi)容的CES評分機制 2. 筆記流量入口與長尾效應 二:小紅書優(yōu)質(zhì)筆記的特點(分維度、類型分析) 1.筆記的本身架構組成 維度 2.…

        2022年11月25日
      • 百度關鍵詞快速排名的4大原理解析(百度怎么刷關鍵詞)

        近期百度公告驚雷算法2.0,升級之快還是第一次吧,看來百度對于刷點擊行為是零容忍了。之前尹華峰SEO技術博客介紹過一篇如何使用刷點擊工具,其實市面上有很多這類SEO快速排名的軟件,…

        2022年11月25日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息