詳解NIO如何實現群聊?

2021-10-25 09:25:42 字數 1506 閱讀 2719

構建selector以及服務端監聽

通道啟動監聽並處理建立連線請求

處理讀資料**資料

實現客戶端測試

服務端的主要功能如下 :

1. 開放監聽埠,方法chatserver構造方法

2. 處理鏈結請求,方法listener實現連線的建立

3. 讀取訊息內容,方法readdata

當chatserver物件被建立時具體實現步驟如下:

1. 建立serversocketchannel物件

2. 設定處理模式為非阻塞模式

3. 繫結監聽埠

4. 將channel註冊到selector中

連線請求處理實現步驟:

1. 獲得所有有事件的key, 通過key就可以拿到使用者的socketchannel

2. 迴圈遍歷每乙個key,判斷當前是讀事件,還是建立連線事件

3. 如果是建立連線事件則直接將該通道註冊到selector中

4. 如果是讀資料事件就交給具體的讀資料方法處理資料

資料處理的具體實現步驟 :

1. 通過key獲取和使用者連線的通道(相當於輸入流)

2. 獲取通道的資料並列印

資料**實現步驟:

2. 通過key拿到和使用者的鏈結講訊息**出去

客戶端實現 :

1. 首先建立socketchannel物件並鏈結到具體的伺服器

2. 將通道註冊到selector中

3. 開啟乙個新的執行緒監聽selector中所有key的事件

4. 在主線程中迴圈阻塞獲取使用者的輸入

五 NIO應用 群聊例項

例項要求 編寫乙個 nio 群聊系統,實現伺服器端和客戶端之間的資料非阻塞簡單通訊 實現多人群聊,單人群聊 伺服器端 可以監測使用者上線,離線,並實現訊息 功能 客戶端 通過channel可以無阻塞傳送訊息給其它所有使用者,同時可以接受其它使用者傳送的訊息 有伺服器 得到 public class ...

如何實現離線群聊

1.群聊訊息要儲存進資料庫,群訊息要有乙個有序id標識。離線使用者上線時,要拉取檢視 2.每個群成員都要在資料庫裡,記錄他最後收到的那個群訊息id。在他上線時,根據這個id和最新id,決定要給他推送哪些訊息 3.使用者收到訊息後,要發個ack給服務端,服務端才跟新他的最後收到訊息id。避免訊息丟包 ...

Nio程式設計詳解

nio程式設計 1.傳統的網路程式設計 在tcp協議中,呼叫accept函式時,會阻塞在那裡,而且每次都需要建立乙個新的執行緒來處理該連線,用這種方式當連線數較多時會產生大量的執行緒,而執行緒之間的切換需要耗費資源,上限較低。2.所以我們需要引入nio 非阻塞io程式設計 nio程式設計的實現方式 ...