簡易網絡聊天室
項目git地址
git提交記錄
前期調查
在聊天室中的每個用戶可以發送消息,發送的消息分為群聊消息和私聊消息,每兩個用戶的聊天消息顯示在一個界面上,每個群組的聊天消息顯示在一個界面上。通過netty框架來編寫服務器端的轉發 消息代碼,客戶端對每個消息的處理代碼。
功能流程圖
面向對象設計類圖
服務器端UML類圖
客戶端UML類圖
關鍵代碼分析
服務器端轉發群聊消息代碼
在ChannelUtils這個類中存儲了許多map,其中一個map存儲一個字符串類型的id和與之對應的ChannelGroup,服務器就是通過這個id獲得ChannelGroup從而轉發給ChannelGroup中的每個客戶端,這樣在一個群組里的其他客戶端就能收到任何一個客戶端發送的信息
服務器端轉發私聊消息代碼
ChannelUtils中還有一個map存儲每個用戶的id和與之對應的Channel,通過這個Channel服務器端可以傳輸數據到客戶端。當私聊消息傳輸到服務器端時,服務器端從消息中取出此消息的接收端id,然后通過id獲取對應的Channel,再將消息封裝好發送到接收端
客戶端接收群聊消息代碼(ClientChatMessageHandler類)
當服務器發送信息到客戶端時,如果是群聊信息,客戶端會自動調用ClientChatMessageHandler中的channelRead0方法。通過傳輸的信息,可以獲得發送端的id和此消息屬於哪個聊天界面,然后客戶端調用方法將消息顯示到聊天窗口中
客戶端接收私聊消息代碼