Netty 實戰篇:構建高性能聊天服務器

在前兩篇文章中,我們深入探討了 Netty 的 IO 模型以及其核心組件的工作原理。本篇文章將通過一個實際的聊天服務器示例,展示如何使用 Netty 構建高性能的網絡應用。


一、項目結構

項目主要包含以下幾個部分:

  • ChatServer:服務器啟動類

  • ChatServerInitializer:初始化通道的處理器

  • ChatServerHandler:處理業務邏輯


二、服務器啟動類

public class ChatServer {public static void main(String[] args) throws Exception {EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try {ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChatServerInitializer());ChannelFuture f = b.bind(8000).sync();f.channel().closeFuture().sync();} finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}
}

上述代碼中,我們創建了兩個事件循環組:bossGroup用于接受客戶端連接,workerGroup 用于處理已連接的客戶端的網絡讀寫。通過 ServerBootstrap 配置服務器,并綁定端口 8000。


三、通道初始化器

public class ChatServerInitializer extends ChannelInitializer<SocketChannel> {@Overrideprotected void initChannel(SocketChannel ch) {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast(new StringDecoder());pipeline.addLast(new StringEncoder());pipeline.addLast(new ChatServerHandler());}
}

在通道初始化器中,我們添加了三個處理器:StringDecoder 用于將字節解碼為字符串,StringEncoder 用于將字符串編碼為字節,ChatServerHandler 用于處理業務邏輯。


四、業務邏輯處理器

public class ChatServerHandler extends SimpleChannelInboundHandler<String> {private static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);@Overridepublic void handlerAdded(ChannelHandlerContext ctx) {Channel incoming = ctx.channel();channels.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 加入\n");channels.add(incoming);}@Overridepublic void handlerRemoved(ChannelHandlerContext ctx) {Channel incoming = ctx.channel();channels.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 離開\n");channels.remove(incoming);}@Overrideprotected void channelRead0(ChannelHandlerContext ctx, String msg) {Channel incoming = ctx.channel();for (Channel channel : channels) {if (channel != incoming) {channel.writeAndFlush("[" + incoming.remoteAddress() + "] " + msg + "\n");} else {channel.writeAndFlush("[你] " + msg + "\n");}}}
}

在 ChatServerHandler 中,我們使用 ChannelGroup 來管理所有連接的客戶端。當有新的客戶端連接或斷開時,服務器會廣播相應的消息。當服務器接收到某個客戶端發送的消息時,會將該消息廣播給所有其他客戶端。


五、測試聊天服務器

啟動服務器后,可以使用多個客戶端(如 Telnet)連接到服務器:

telnet localhost 8000

連接成功后,輸入的消息將被廣播給所有其他已連接的客戶端。


六、總結

通過本篇文章,我們實現了一個基于 Netty 的簡易聊天服務器,展示了 Netty 在處理多客戶端通信方面的強大能力。在實際應用中,可以在此基礎上擴展更多功能,如用戶認證、私聊、群聊等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83104.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智紳科技——科技賦能健康養老,構建智慧晚年新生態

當老齡化浪潮與數字技術深度碰撞&#xff0c;智紳科技以 “科技賦能健康&#xff0c;智慧守護晚年” 為核心理念&#xff0c;錨定數字健康與養老服務賽道&#xff0c;通過人工智能、物聯網、大數據等技術集成&#xff0c;為亞健康群體與中老年人群構建 “監測 - 預防 - 輔助 - …

Tkinter軟件——顯示txt標簽的目標水平邊框圖像

代碼&#xff1a; import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

Linux 文件覆蓋機制與實踐:以 mv 命令為切入點

引言&#xff1a;文件覆蓋的本質 文件覆蓋是 Linux 文件系統中常見的操作&#xff0c;指的是在目標路徑已存在文件的情況下&#xff0c;將源文件的內容寫入目標文件&#xff0c;導致目標文件的原有內容被替換。在 Linux 中&#xff0c;文件覆蓋通常通過命令行工具&#xff08;…

學習路之PHP--easyswoole操作數據庫

學習路之PHP--easyswoole操作數據庫 0、安裝orm插件一、創建數據庫二、創建模型三、控制器顯示四、效果五、問題 0、安裝orm插件 composer require easyswoole/orm一、創建數據庫 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵,titl…

手寫multi-head Self-Attention,各個算子詳細注釋版

文章目錄 MultiHeadAttentionFormal的實現操作詳解1. &#x1f50d; attention_mask2. &#x1f50d; matmul? 其他實現方式1. 使用 運算符&#xff08;推薦簡潔寫法&#xff09;2. 使用 torch.einsum()&#xff08;愛因斯坦求和約定&#xff09;3. 使用 torch.bmm()&#xf…

尚硅谷redis7 41-46 redis持久化之AOF異常恢復演示

AOF每一秒鐘寫入一次。當內容才寫了一小半,沒有寫完整時&#xff0c;突然,redis掛了,導致aof文件錯誤。 故意亂寫正常的AOF文件,模擬網絡閃斷文件寫error 重啟 Redis 之后就會進行AOF文件的載入,發現啟動都失敗 首先cd /usr/local/bin 異常修復命令:redis-check-aof -- fix 進…

004時裝購物系統技術解析:構建智能時尚消費平臺

時裝購物系統技術解析&#xff1a;構建智能時尚消費平臺 在電商行業蓬勃發展的當下&#xff0c;時裝購物系統憑借其便捷性與多樣性&#xff0c;成為消費者選購時尚單品的重要渠道。該系統通過商品信息、訂單管理等核心模塊&#xff0c;結合前臺展示與后臺錄入功能&#xff0c;…

數據湖 (特點+與數據倉庫和數據沼澤的對比講解)

數據湖就像一個“數據水庫”&#xff0c;把企業所有原始數據&#xff08;結構化的表格、半結構化的日志、非結構化的圖片/視頻&#xff09;原樣存儲&#xff0c;供后續按需分析。 對比傳統數據倉庫&#xff1a; 數據倉庫數據湖數據清洗后的結構化數據&#xff08;如Excel表格&…

深度剖析Node.js的原理及事件方式

早些年就接觸過Node.js&#xff0c;當時對于這個連接前后端框架就感到很特別。尤其是以獨特的異步阻塞特性&#xff0c;重塑了了服務器端編程的范式。后來陸陸續續做了不少項目&#xff0c;通過實踐對它或多或少增強了不少理解。今天&#xff0c;我試著將從將從原理層剖析其運行…

【AI預測】5月30日尼克斯大戰前瞻:東部黑馬能否再下一城?

&#x1f3c0; 隨著賽季進入白熱化階段&#xff0c;5月30日尼克斯的這場比賽注定焦點十足。作為東部近年來少有的“黑馬型”球隊&#xff0c;尼克斯用硬朗的防守和團隊配合讓人重新認識了這支老牌勁旅。 這篇文章&#xff0c;我們將從數據模型球員表現戰術執行力三個維度&…

人工智能賦能基礎教育個性化學習的理論建構與實踐探索

一、引言 1.1 研究背景與意義 隨著科技的飛速發展&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;已逐漸成為推動社會進步的重要力量。在教育領域&#xff0c;人工智能的應用正逐步改變傳統的教學模式&#xff0c;為個性化學習提供了新…

歷年四川大學計算機保研上機真題

2025四川大學計算機保研上機真題 2024四川大學計算機保研上機真題 2023四川大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school 分數求和 題目描述 有一分數序列&#xff1a; 2 / 1 2/1 2/1, 3 / 2 3/2 3/2, 5 / 3 5/3 5/3, 8 / 5 8/5 8/5, 13 /…

正點原子Z15I ZYNQ 開發板發布!板載PCIe2.0、SPFx2、MIPI CSI等接口,資料豐富!

正點原子Z15I ZYNQ 開發板發布&#xff01;板載PCIe2.0、SPFx2、MIPI CSI等接口&#xff0c;資料豐富&#xff01; 正點原子Z15I ZYNQ開發板&#xff0c;核心板全工業級設計&#xff0c;主控芯片的型號是XC7Z015CLG485-2I。開發板由核心板&#xff0b;底板組成&#xff0c;外設…

Ubuntu 22.04 上使用 Docker 安裝 RagFlow

GitHub地址:添加鏈接描述 RAGFlow 是一款開源的檢索增強生成(Retrieval-Augmented Generation,簡稱 RAG)引擎,旨在通過深度文檔理解技術,結合大語言模型(LLM),為用戶提供高質量、可溯源的問答服務。 ?? 快速入門 RAGFlow 提供了便捷的部署方式,支持 Docker 環境。…

【論文閱讀】DanceGRPO: Unleashing GRPO on Visual Generation

DanceGRPO: Unleashing GRPO on Visual Generation 原文摘要 研究背景與問題 生成模型的突破&#xff1a;擴散模型和整流流等生成模型在視覺內容生成領域取得了顯著進展。核心挑戰&#xff1a;如何讓模型的輸出更好地符合人類偏好仍是一個關鍵問題。現有方法的局限性&#xff1…

Milvus可視化客戶端Attu安裝與使用指南

導讀&#xff1a;在向量數據庫運維管理中&#xff0c;開發者往往面臨著復雜的命令行操作和繁瑣的API調用挑戰。作為Milvus向量數據庫的官方圖形化管理工具&#xff0c;Attu為這一痛點提供了優雅的解決方案。 本文深入解析Attu的核心架構和實用功能&#xff0c;重點介紹其在數據…

C# 結合PaddleOCRSharp搭建Http網絡服務

Windows打開端口&#xff1a; 控制面板 > 系統和安全 > 防火墻> 高級設置 → 入站規則 → 右側選擇 → 新建規則 → 端口 → 協議類型 TCP→ 端口 using System; using System.Drawing; using System.IO; using System.Net; using System.Text; using System.Threadi…

【論文精讀】2024 ECCV--MGLD-VSR現實世界視頻超分辨率(RealWorld VSR)

文章目錄 一、摘要二、問題三、Method3.1 Latent Diffusion Model3.2 Motion-guided Diffusion Sampling3.3 Temporal-aware Decoder Fine-tuning 四、實驗設置4.1 訓練階段4.2 訓練數據 貢獻總結 論文全稱&#xff1a; Motion-Guided Latent Diffusion for Temporally Consis…

初學c語言21(文件操作)

一.為什么使用文件 之前我們寫的程序的數據都是存儲到內存里面的&#xff0c;當程序結束時&#xff0c;內存回收&#xff0c;數據丟失&#xff0c; 再次運行程序時&#xff0c;就看不到上次程序的數據&#xff0c;如果要程序的數據一直保存得使用文件 二.文件 文件一般可以…

歷年廈門大學計算機保研上機真題

2025廈門大學計算機保研上機真題 2024廈門大學計算機保研上機真題 2023廈門大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school 數字變換過程的最大值與步數 題目描述 輸入一個數字 n n n&#xff0c;如果 n n n 是偶數就將該偶數除以 2 2 2&…