国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SpringBoot 和WebSocket 的點對點聊天系統(tǒng)研發(fā)與部署

2020-07-04 08:53黎志偉
科學(xué)技術(shù)創(chuàng)新 2020年18期
關(guān)鍵詞:服務(wù)端列表聊天

黎志偉

(云南師范大學(xué) 信息學(xué)院,云南 昆明650000)

1 概述

目前,隨著軟件市場的不斷擴(kuò)大,各式各樣的網(wǎng)站、小程序、APP 應(yīng)運而生,為了滿足軟件快速實現(xiàn)并簡捷部署的需求,大量免費開源項目和新技術(shù)被運用來實現(xiàn)軟件的快捷開發(fā)與部署,這種方式不僅縮短了平均開發(fā)周期,而且降低了該部分功能出現(xiàn)錯誤的可能性。本文介紹的是在web 平臺下使用docker 引擎和web socket 通訊協(xié)議開發(fā)并部署一款聊天系統(tǒng),即在項目中引入web socket 協(xié)議進(jìn)行對應(yīng)的接口實現(xiàn),最后服務(wù)器安裝docker 引擎來完成系統(tǒng)部署。

2 docker 引擎與web socket 協(xié)議介紹

Docker 容器是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以以統(tǒng)一的方式打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何安裝了docker 引擎的服務(wù)器上(包括流行的Linux 機器、windows 機器),也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似iPhone 的app)。幾乎沒有性能開銷,可以很容易地在機器和數(shù)據(jù)中心中運行。最重要的是,他們不依賴于任何語言、框架包括系統(tǒng)。Web Socket 是一種在單個TCP 連接上進(jìn)行全雙工通信的協(xié)議,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。

3 系統(tǒng)總體設(shè)計

聊天系統(tǒng)的設(shè)計主要運用了web socket 的On open 方法和On message 兩個方法,客戶端首先生成一個不重復(fù)的UUID 作為用戶名去與服務(wù)端建立連接。服務(wù)端收到連接并維護(hù)所有客戶端的連接,連接成功后客戶端加載所有與服務(wù)端建立了連接的用戶,之后客戶端之間再以服務(wù)端做中轉(zhuǎn)站其它客戶端實現(xiàn)通訊,最后將系統(tǒng)部署在docker 容器中。本系統(tǒng)事先會準(zhǔn)備一些圖片,作為默認(rèn)用戶頭像,用戶連接以[key,value]的存儲方式保存在服務(wù)端特定集合中,本次會話的已讀和未讀消息也會保存在客戶端特定集合中。由于本次系統(tǒng)的重點不在于客戶端界面,客戶端制作為了節(jié)省時間,系統(tǒng)運用了一些網(wǎng)絡(luò)上開放的前端組件,主要包括3 個界面,系統(tǒng)初始界面、用戶列表界面、聊天主體界面。系統(tǒng)的界面流程圖如圖所示。這里的一些組件已經(jīng)定義好了基礎(chǔ)點擊事件,但系統(tǒng)還需對部分業(yè)務(wù)邏輯代碼進(jìn)行擴(kuò)展,比如點擊事件;同時增加了系統(tǒng)需要實現(xiàn)的某些功能,主要增加了未讀消息數(shù)量提示功能,未讀/已讀消息保存功能,未讀消息提示清空功能等。

4 主要功能實現(xiàn)

4.1 通訊功能。若A 用戶要與B 用戶進(jìn)行通訊,A 用戶首先需要點擊好友列表中的B 用戶進(jìn)入到聊天界面,A 用戶在發(fā)送消息區(qū)域輸入要發(fā)送的內(nèi)容后,通過回車事件調(diào)用本地的send 方法,同時將發(fā)送的內(nèi)容添加到聊天信息展示區(qū)域的左側(cè),之后進(jìn)入到服務(wù)端的On message 方法,通過消息接收方B 的send text 方法將消息發(fā)送到接收方B,接收方B 的客戶端進(jìn)行一系列判斷,若都通過,直接將收到的消息添加到聊天消息區(qū)域的右側(cè)。

4.2 臨時保存聊天記錄。為了不影響用戶的聊天體驗,本系統(tǒng)還要實現(xiàn)保存當(dāng)前用戶和其它用戶的聊天信息;本文提出兩種方案,第一種就是在當(dāng)前用戶的本地客戶端用特定集合來保存聊天信息;第二種是將所有消息以特定的格式在服務(wù)端做持久化處理,并設(shè)置過期時間;本文選取第一種簡單的方案來處理。還有一點需要注意由于聊天信息保存在客戶端,也未作持久化處理,在客戶端保存的聊天信息失效時間點是用戶關(guān)閉了瀏覽器,因為聊天信息是保存在本地特定的集合中,當(dāng)用戶關(guān)閉瀏覽器之后,將會丟失這些信息。

4.3 加載臨時保存的聊天信息和未讀消息。有了臨時保存聊天信息方案,若A 用戶切換聊天對象后,能恢復(fù)與B 之前的聊天信息,同時還要檢查B 是否給A 發(fā)消息且A 未讀這些消息,若有,在恢復(fù)完與B 之前的聊天信息后,還需要加載未讀消息。具體步驟如下:通過A 的UUID 與B 的UUID 組合起來從已讀消息集合中取出聊天信息Messages。遍歷Messages,通過每一條消息中的標(biāo)識位(not Mine 和空)來判斷添加在聊天的界面左側(cè)或者右側(cè)。通過B的UUID 去遍歷未讀消息集合,消息需滿足標(biāo)志為未讀,這是為了避免重復(fù)加載。這里是直接將未讀消息添加到聊天界面的右側(cè),同時該條消息會被添加到對應(yīng)的已讀消息集合。

4.4 加載所有在線用戶。A 用戶運行系統(tǒng),首先調(diào)用客戶端的On open 方法以隨機生成的UUID 碼作為用戶名與服務(wù)端建立連接;服務(wù)端接收到客戶端的連接,同時將用戶名和對應(yīng)的session 保存在一個特定的[key,value]集合中;之后當(dāng)前客戶端加載所有在線用戶并以列表的形式展示,同時通過調(diào)用服務(wù)端的On message 方法通知其它所有在線的用戶,A 上線了需要重新加載好友列表。

4.5 未讀消息提示。先逐一遍歷本地未讀消息的集合,每遍歷一條消息之后都會遍歷一遍A 用戶的在線好友列表,如果未讀消息的發(fā)送方與A 用戶的好友列表中某一個用戶名相等,則在A 用戶對應(yīng)的好友列表上將未讀消息數(shù)量上加一。如圖所示。

未讀消息提示

4.6 未讀消息清空。若A 用戶打開與B 用戶的聊天界面,后臺會加載B 發(fā)送給A 且A 未讀的消息,加載完B 發(fā)過來的消息后,需要把B 對應(yīng)的未讀消息數(shù)量設(shè)置為0。

5 docker 容器化部署

首先,在linux 服務(wù)器上安裝docker,修改鏡像為阿里云私人鏡像地址,安裝完成后,直接拉取一個標(biāo)準(zhǔn)的tomcat 鏡像下來;安裝Docker-compose,它是docker 的服務(wù)編排工具,主要是用來構(gòu)建多個服務(wù)。在docker-compose.yml 文件中寫好對tomcat 的配置,其中有一個比較重要的屬性就是數(shù)據(jù)卷屬性,要設(shè)置宿主機目錄和容器目錄,這里的容器目錄指的是tomcat 的webapps 目錄,可以簡單理解為如果在宿主機目錄下放了項目war 包,那么容器目錄下也會有,起一個共享數(shù)據(jù)的作用,知道了這個作用,那么直接將war 包放在服務(wù)器指定的目錄下即可。一切準(zhǔn)備就緒,通過docker-compose啟動我們的服務(wù)。如果后期項目需要多個tomcat,那是不是在docker-compose 的配置文件中配置多個tomcat 即可呢,如果又需要mysql,同樣可以加進(jìn)來。只需要一個命令即可啟動配置文件中所有定義好的服務(wù),非常簡捷。當(dāng)然它的好處還有很多,這里就不一一列舉了。

6 結(jié)論

在整個實現(xiàn)過程中,編碼不是特別規(guī)范,比如在某些地方采取拼接字符串來實現(xiàn)一些需求,這樣的后果就是若后期出現(xiàn)大規(guī)模修改會出現(xiàn)bug,修改起來費時費力,因此在以后的開發(fā)中應(yīng)該盡可能規(guī)劃好自己的開發(fā)流程,同提升編碼的健壯性。此外,本系統(tǒng)沒有采用設(shè)計模式,一切采用最基本的編碼方式,旨在于給那些學(xué)習(xí)即時通訊的同學(xué)提供一種參考,能夠快速入門。

猜你喜歡
服務(wù)端列表聊天
學(xué)習(xí)運用列表法
擴(kuò)列吧
新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
我就是不想跟你聊天了
敞開門聊天
列表畫樹狀圖各有所長
2011年《小說月刊》轉(zhuǎn)載列表
摸清黑客套路防范木馬侵入
聊天不倒王
你我聊天桌等