最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java實現(xiàn)互聯(lián)網(wǎng)實時聊天系統(tǒng)(附源碼)

 更新時間:2022年09月15日 08:58:08   作者:Java程序員-張凱  
Netty?是一個利用?Java?的高級網(wǎng)絡的能力,隱藏其背后的復雜性而提供一個易于使用的?API?的客戶端/服務器框架。本文將利用它實現(xiàn)互聯(lián)網(wǎng)實時聊天系統(tǒng),感興趣的可以了解一下

0. 前言

決定以Netty為核心,以WebSocket為應用層通信協(xié)議做一個互聯(lián)網(wǎng)聊天系統(tǒng),整體而言就像微信網(wǎng)頁版一樣,但考慮到這個聊天系統(tǒng)的功能非常多,因此只打算實現(xiàn)核心的聊天功能,包括單發(fā)、群發(fā)、文件發(fā)送,然后把項目與Spring整合做成開源、可拓展的方式,給大家參考、討論、使用,歡迎大家的指點。

關(guān)于Netty

Netty 是一個利用 Java 的高級網(wǎng)絡的能力,隱藏其背后的復雜性而提供一個易于使用的 API 的客戶端/服務器框架。

關(guān)于WebSocket通信協(xié)議

WebSocket是為了解決HTTP協(xié)議中通信只能由客戶端發(fā)起這個弊端而出現(xiàn)的,WebSocket基于HTTP5協(xié)議,借用HTTP進行握手、升級,能夠做到輕量的、高效的、雙向的在客戶端和服務端之間傳輸文本數(shù)據(jù)。

1、技術(shù)準備

IDE:MyEclipse 2016

JDK版本:1.8.0_121

瀏覽器:谷歌瀏覽器、360瀏覽器(極速模式)(涉及網(wǎng)頁前端設計,后端開發(fā)表示很苦悶)

涉及技術(shù):

  • Netty 4
  • WebSocket + HTTP
  • Spring MVC + Spring
  • JQuery
  • Bootstrap 3 + Bootstrap-fileinput
  • Maven 3.5
  • Tomcat 8.0

2. 整體說明

2.1 設計思想

整個通信系統(tǒng)以Tomcat作為核心服務器運行,其下另開一個線程運行Netty WebSocket服務器,Tomcat服務器主要處理客戶登錄、個人信息管理等的HTTP類型請求(通常的業(yè)務類型),端口為8080,Netty WebSockt服務器主要處理用戶消息通信的WebSocket類型請求,端口為3333。用戶通過瀏覽器登錄后,瀏覽器會維持一個Session對象(有效時間30分鐘)來保持登錄狀態(tài),Tomcat服務器會返回用戶的個人信息,同時記錄在線用戶,根據(jù)用戶id建立一條WebSocket連接并保存在后端以便進行實時通信。當一個用戶向另一用戶發(fā)起通信,服務器會根據(jù)消息內(nèi)容中的對話方用戶id,找到保存的WebSocket連接,通過該連接發(fā)送消息,對方就能夠收到即時收到消息。當用戶注銷或退出時,釋放WebSocket連接,清空Session對象中的登錄狀態(tài)。(插播一條廣告:需要開通正版IDEA的可以聯(lián)系我,56元一年,正版授權(quán)激活,官網(wǎng)可查有效期,有需要的加我微信:poxiaozhiai6,備注:914。)

事實上Netty也可以用作一個HTTP服務器,而這里使用Spring MVC處理HTTP請求是出于熟悉的緣故,也比較接近傳統(tǒng)開發(fā)的方式。

2.2 系統(tǒng)結(jié)構(gòu)

系統(tǒng)采用B/S(Browser/Server),即瀏覽器/服務器的結(jié)構(gòu),主要事務邏輯在服務器端(Server)實現(xiàn)。借鑒MVC模式的思想,從上至下具體又分為視圖層(View)、控制層(Controller)、業(yè)務層(Service)、模型層(Model)、數(shù)據(jù)訪問層(Data Access)

2.3 項目結(jié)構(gòu)

項目后端結(jié)構(gòu):

項目前端結(jié)構(gòu):

2.4 系統(tǒng)功能模塊

系統(tǒng)只包括兩個模塊:登錄模塊和聊天管理模塊。

  • 登錄模塊:既然作為一個系統(tǒng),那么登錄的角色認證是必不可少的,這里使用簡單、傳統(tǒng)的Session方式維持登錄狀態(tài),當然也有對應的注銷功能,但這里的注銷除了清空Session對象,還要釋放WebSocket連接,否則造成內(nèi)存泄露。
  • 聊天管理模塊:系統(tǒng)的核心模塊,這部分主要使用Netty框架實現(xiàn),功能包括信息、文件的單條和多條發(fā)送,也支持表情發(fā)送。
  • 其他模塊:如好友管理模塊、聊天記錄管理、注冊模塊等,我并沒有實現(xiàn),有興趣的話可以自行實現(xiàn),與傳統(tǒng)的開發(fā)方式類似。

由于本系統(tǒng)涉及多個用戶狀態(tài),有必要進行說明,下面給出本系統(tǒng)的用戶狀態(tài)轉(zhuǎn)換圖。

2.5 系統(tǒng)界面

系統(tǒng)聊天界面如下:

3. 核心編碼

這里只說明需要注意的地方,詳細的請看源碼

3.1 Netty服務器啟動與關(guān)閉

當關(guān)閉Tomcat服務器時,也要釋放Netty相關(guān)資源,否則會造成內(nèi)存泄漏,關(guān)閉方法如下面的close(),如果只是使用shutdownGracefully()方法的話,關(guān)閉時會報內(nèi)存泄露Memory Leak異常(但IDE可能來不及輸出到控制臺)

/**
 * 描述: Netty WebSocket服務器
 *      使用獨立的線程啟動
 * @author Kanarien
 * @version 1.0
 * @date 2018年5月18日 上午11:22:51
 */
public class WebSocketServer implements Runnable{
 
        /**
  * 描述:啟動Netty Websocket服務器
  */
 public void build() {
     // 略,詳細請看源碼
 }
     
      /**
  * 描述:關(guān)閉Netty Websocket服務器,主要是釋放連接
  *     連接包括:服務器連接serverChannel,
  *     客戶端TCP處理連接bossGroup,
  *     客戶端I/O操作連接workerGroup
  *
  *     若只使用
  *         bossGroupFuture = bossGroup.shutdownGracefully();
  *         workerGroupFuture = workerGroup.shutdownGracefully();
  *     會造成內(nèi)存泄漏。
  */
 public void close(){
     serverChannelFuture.channel().close();
  Future<?> bossGroupFuture = bossGroup.shutdownGracefully();
        Future<?> workerGroupFuture = workerGroup.shutdownGracefully();
 
        try {
            bossGroupFuture.await();
            workerGroupFuture.await();
        } catch (InterruptedException ignore) {
            ignore.printStackTrace();
        }
 }
 
}

4. 效果及操作演示

4.1 登錄操作

登錄入口為:http://localhost:8080/WebSocket/login 或 http://localhost:8080/WebSocket/ 當前系統(tǒng)用戶固定為9個,群組1個,包括9人用戶。

  • 用戶1 用戶名:Member001 密碼:001
  • 用戶2 用戶名:Member002 密碼:002
  • ······
  • 用戶9 用戶名:Member009 密碼:009

4.2 聊天演示

5. 源碼下載

下載鏈接: https://pan.baidu.com/s/1JuXRqWH0HFN0ruMm-BnysA

提取碼: e9ej

以上就是基于Java實現(xiàn)互聯(lián)網(wǎng)實時聊天系統(tǒng)(附源碼)的詳細內(nèi)容,更多關(guān)于Java實時聊天系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java面試題沖刺第一天--基礎篇1

    Java面試題沖刺第一天--基礎篇1

    這篇文章主要為大家分享了最有價值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java對象數(shù)組的添加、刪除和遍歷代碼示例

    Java對象數(shù)組的添加、刪除和遍歷代碼示例

    在Java編程中,我們經(jīng)常需要對數(shù)據(jù)結(jié)構(gòu)進行遍歷操作,并根據(jù)業(yè)務需求刪除部分元素,這篇文章主要給大家介紹了關(guān)于Java對象數(shù)組的添加、刪除和遍歷的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • java String類功能、原理與應用案例【統(tǒng)計、判斷、轉(zhuǎn)換等】

    java String類功能、原理與應用案例【統(tǒng)計、判斷、轉(zhuǎn)換等】

    這篇文章主要介紹了java String類功能、原理與應用案例,結(jié)合實例形式詳細分析了java String類的基本功能、構(gòu)造方法,以及使用String類實現(xiàn)統(tǒng)計、判斷、轉(zhuǎn)換等功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 深入java垃圾回收的詳解

    深入java垃圾回收的詳解

    本篇文章是對java垃圾回收進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Spring Boot 排除某個類加載注入IOC的操作

    Spring Boot 排除某個類加載注入IOC的操作

    這篇文章主要介紹了Spring Boot 排除某個類加載注入IOC的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中Comparator升序降序的具體使用

    Java中Comparator升序降序的具體使用

    本文主要介紹了Java中Comparator升序降序的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Intellij Idea修改代碼方法參數(shù)自動提示快捷鍵的操作

    Intellij Idea修改代碼方法參數(shù)自動提示快捷鍵的操作

    這篇文章主要介紹了Intellij Idea修改代碼方法參數(shù)自動提示快捷鍵的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • springboot多文件或者文件夾壓縮成zip的方法

    springboot多文件或者文件夾壓縮成zip的方法

    最近碰到個需要下載zip壓縮包的需求,于是我在網(wǎng)上找了下別人寫好的zip工具類,下面通過本文給大家分享springboot多文件或者文件夾壓縮成zip的方法,感興趣的朋友一起看看吧
    2024-07-07
  • java如何從linux服務器下載文件

    java如何從linux服務器下載文件

    這篇文章主要介紹了java如何從linux服務器下載文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Boot文件上傳原理與實現(xiàn)詳解

    Spring Boot文件上傳原理與實現(xiàn)詳解

    這篇文章主要介紹了Spring Boot 文件上傳原理與實現(xiàn)詳解,前端文件上傳是面向多用戶的,多用戶之間可能存在上傳同一個名稱、類型的文件;為了避免文件沖突導致的覆蓋問題這些應該在后臺進行解決,需要的朋友可以參考下
    2024-01-01

最新評論

武清区| 饶河县| 阳原县| 西畴县| 大埔区| 交口县| 黄浦区| 永安市| 乌拉特后旗| 河西区| 彭州市| 三穗县| 牟定县| 辉县市| 本溪| 岗巴县| 蒲城县| 拉孜县| 海阳市| 林芝县| 买车| 辰溪县| 瑞丽市| 威信县| 新龙县| 柳河县| 九寨沟县| 谢通门县| 夏津县| 浮山县| 潮州市| 锡林浩特市| 香格里拉县| 永和县| 砀山县| 东乡| 曲阜市| 鲜城| 桓台县| 衡东县| 芮城县|