国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[AIGC] 快速掌握Netty,打造高性能IM服務(wù)器!

這篇具有很好參考價(jià)值的文章主要介紹了[AIGC] 快速掌握Netty,打造高性能IM服務(wù)器!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言:Netty 是一個(gè)非常優(yōu)秀的網(wǎng)絡(luò)應(yīng)用程序框架,支持高并發(fā)、高性能的網(wǎng)絡(luò)通信,適用于開(kāi)發(fā)各種服務(wù)器程序,如即時(shí)通訊、游戲、物聯(lián)網(wǎng)等。使用 Netty 可以大大提升服務(wù)器程序的性能和可靠性。本文將介紹 Netty 的基本原理和使用方法,并給出一個(gè)簡(jiǎn)單的 IM 程序示例,幫助讀者快速掌握 Netty 的使用。


一、什么是Netty?

Netty是一個(gè)高性能、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架,基于 Java NIO (Non-blocking I/O) 開(kāi)發(fā)。它主要用于開(kāi)發(fā)高性能的服務(wù)器程序,例如即時(shí)通訊、游戲、物聯(lián)網(wǎng)等。

二、為什么使用 Netty?

使用 Netty 的主要原因包括:

  1. 高性能:基于 Java NIO 實(shí)現(xiàn),支持高并發(fā),I/O 處理能力強(qiáng),同時(shí)在可用性方面有一定的優(yōu)化。

  2. 高可靠性:充分利用 Java NIO 機(jī)制,避免 I/O 阻塞,提高應(yīng)用程序的可用性。

  3. 易于開(kāi)發(fā):提供了豐富的 API 和開(kāi)發(fā)文檔,API 使用簡(jiǎn)單易懂,易于上手。

  4. 可擴(kuò)展性強(qiáng):可自定義編解碼器、攔截器、消息處理器等,可以很方便地?cái)U(kuò)展新的協(xié)議。

  5. 支持多種協(xié)議:支持 TCP/UDP、HTTP、WebSocket 等多種協(xié)議。

三、怎么使用 Netty?

使用 Netty 主要需要進(jìn)行以下幾個(gè)步驟:

  1. 創(chuàng)建服務(wù)器啟動(dòng)類(lèi),配置服務(wù)器的參數(shù)和啟動(dòng)程序。

  2. 編寫(xiě)客戶端連接請(qǐng)求處理類(lèi),處理客戶端連接請(qǐng)求,建立連接。

  3. 編寫(xiě)消息處理類(lèi),對(duì)客戶端發(fā)送的消息進(jìn)行解碼和處理。

  4. 編寫(xiě)消息編碼類(lèi),將服務(wù)器的響應(yīng)消息編碼成二進(jìn)制數(shù)據(jù)。

  5. 實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)交互,完成數(shù)據(jù)的發(fā)送和接收。

四、Netty 實(shí)現(xiàn)一個(gè)IM程序

以下是一個(gè)使用 Netty 實(shí)現(xiàn)的簡(jiǎn)單的 IM 程序,支持用戶登錄、發(fā)送消息、退出的功能。

public class NettyIMServer {

    public static void main(String[] args) throws Exception {
        // 創(chuàng)建 ServerBootstrap
        ServerBootstrap bootstrap = new ServerBootstrap();

        // 配置 EventLoopGroup
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();

        try {
            bootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline pipeline = ch.pipeline();

                            // 解碼器
                            pipeline.addLast(new StringDecoder());
                            // 編碼器
                            pipeline.addLast(new StringEncoder());
                            // 消息處理器
                            pipeline.addLast(new NettyIMServerHandler());
                        }
                    });

            // 綁定端口
            ChannelFuture future = bootstrap.bind(8888).sync();
            System.out.println("Server started and listen on: " + future.channel().localAddress());
            // 等待服務(wù)器監(jiān)聽(tīng)端口關(guān)閉
            future.channel().closeFuture().sync();
        } finally {
            // 釋放資源
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }

    static class NettyIMServerHandler extends SimpleChannelInboundHandler<String> {

        private static final Map<String, Channel> clients = new ConcurrentHashMap<>();

        @Override
        protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
            // 獲取 Channel
            Channel channel = ctx.channel();
            // 判斷消息類(lèi)型
            if (msg.startsWith("[Login]")) {
                // 登錄消息,獲取用戶名
                String username = msg.substring(7);
                System.out.println("用戶[" + username + "]登錄了");
                // 將用戶信息保存到 clients map 中
                clients.put(username, channel);
            } else if (msg.startsWith("[Logout]")) {
                // 退出消息,獲取用戶名
                String username = msg.substring(8);
                System.out.println("用戶[" + username + "]退出了");
                // 將用戶信息從 clients map 中移除
                clients.remove(username);
            } else if (msg.startsWith("[SendTo]")) {
                // 發(fā)送消息,格式為 [SendTo]:[username]:[message]
                String[] parts = msg.split(":", 3);
                String to = parts[1];
                String message = parts[2];
                // 獲取發(fā)送者用戶名
                String from = clients.entrySet().stream()
                        .filter(entry -> channel.equals(entry.getValue()))
                        .map(Map.Entry::getKey)
                        .findFirst()
                        .orElse("unknown");
                // 查找接收者
                Channel toChannel = clients.get(to);
                if (toChannel != null) {
                    // 發(fā)送消息給接收者
                    toChannel.writeAndFlush("[" + from + "]: " + message + "\n");
                } else {
                    // 接收者不存在,發(fā)送錯(cuò)誤消息給發(fā)送者
                    channel.writeAndFlush("[Error]: User not found\n");
                }
            }
        }

        @Override
        public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
            System.out.println("客戶端[" + ctx.channel().remoteAddress() + "]連接成功");
            super.handlerAdded(ctx);
        }

        @Override
        public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
            System.out.println("客戶端[" + ctx.channel().remoteAddress() + "]斷開(kāi)連接");
            super.handlerRemoved(ctx);
        }

        @Override
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
            System.out.println("客戶端[" + ctx.channel().remoteAddress() + "]發(fā)生異常:" + cause.getMessage());
            super.exceptionCaught(ctx, cause);
        }
    }
}

這段程序是一個(gè)基于 Netty 的簡(jiǎn)單的 IM(即時(shí)通訊)服務(wù)器程序,它可以實(shí)現(xiàn)用戶登錄、退出和發(fā)送消息等功能。

程序主要分為兩部分,第一部分是服務(wù)器的啟動(dòng),第二部分是消息處理器。

在服務(wù)器啟動(dòng)部分,程序首先創(chuàng)建了一個(gè) ServerBootstrap 實(shí)例,該實(shí)例用于啟動(dòng)服務(wù)器。然后配置了兩個(gè) EventLoopGroup 實(shí)例,一個(gè)用于接收客戶端連接,一個(gè)用于處理客戶端請(qǐng)求。接著使用 bootstrap.group() 方法將兩個(gè) EventLoopGroup 實(shí)例關(guān)聯(lián)起來(lái),并指定服務(wù)器的 Channel 類(lèi)型為 NioServerSocketChannel。最后使用 childHandler() 方法設(shè)置消息的處理器。

在消息處理器部分,程序首先定義了一個(gè) Map 類(lèi)型的 clients 對(duì)象,用于保存客戶端的信息。然后重寫(xiě)了 channelRead0() 方法,該方法會(huì)在客戶端發(fā)送消息時(shí)被調(diào)用。在該方法中,程序根據(jù)消息內(nèi)容判斷消息類(lèi)型,并執(zhí)行相應(yīng)的邏輯。

如果是登錄消息,則從消息中提取出用戶名,并將其保存到 clients 對(duì)象中;如果是退出消息,則從消息中提取出用戶名,并從 clients 對(duì)象中移除該用戶;如果是發(fā)送消息,則從消息中提取出接收者和消息內(nèi)容,并通過(guò) clients 對(duì)象查找接收者的 Channel,然后將消息發(fā)送給接收者。在發(fā)送消息時(shí),程序還會(huì)將發(fā)送者的用戶名添加到消息前面,以便接收者知道消息是由誰(shuí)發(fā)送的。

此外,程序還重寫(xiě)了 handlerAdded()、handlerRemoved() 和 exceptionCaught() 方法,用于處理客戶端連接和異常。在 handlerAdded() 方法中,程序會(huì)記錄客戶端連接成功的事件;在 handlerRemoved() 方法中,程序會(huì)記錄客戶端斷開(kāi)連接的事件;在 exceptionCaught() 方法中,程序會(huì)記錄客戶端發(fā)生異常的事件。

總結(jié)

Netty 是一個(gè)高性能、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架,可以用于開(kāi)發(fā)高性能的服務(wù)器程序,例如即時(shí)通訊、游戲、物聯(lián)網(wǎng)等。使用 Netty 可以獲得高性能、高可靠性、易于開(kāi)發(fā)、可擴(kuò)展性強(qiáng)、支持多種協(xié)議的優(yōu)點(diǎn)。

使用 Netty 主要需要進(jìn)行以下幾個(gè)步驟:創(chuàng)建服務(wù)器啟動(dòng)類(lèi),配置服務(wù)器的參數(shù)和啟動(dòng)程序;編寫(xiě)客戶端連接請(qǐng)求處理類(lèi),處理客戶端連接請(qǐng)求,建立連接;編寫(xiě)消息處理類(lèi),對(duì)客戶端發(fā)送的消息進(jìn)行解碼和處理;編寫(xiě)消息編碼類(lèi),將服務(wù)器的響應(yīng)消息編碼成二進(jìn)制數(shù)據(jù);實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)交互,完成數(shù)據(jù)的發(fā)送和接收。

本文還介紹了一個(gè)使用 Netty 實(shí)現(xiàn)的簡(jiǎn)單的 IM 程序,支持用戶登錄、發(fā)送消息、退出的功能。該程序主要分為服務(wù)器的啟動(dòng)和消息處理器兩部分,可以作為學(xué)習(xí) Netty 和 IM 服務(wù)器的入門(mén)示例。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-734925.html

到了這里,關(guān)于[AIGC] 快速掌握Netty,打造高性能IM服務(wù)器!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 自己手寫(xiě)了一套高性能分布式IM即時(shí)通訊系統(tǒng),出去面試嘎嘎聊,都把面試官整不會(huì)了!

    自己手寫(xiě)了一套高性能分布式IM即時(shí)通訊系統(tǒng),出去面試嘎嘎聊,都把面試官整不會(huì)了!

    沉淀,成長(zhǎng),突破,幫助他人,成就自我。 大家好,我是冰河~~ 分布式IM即時(shí)通訊系統(tǒng)本質(zhì)上就是對(duì)線上聊天和用戶的管理,針對(duì)聊天本身來(lái)說(shuō),最核心的需求就是: 發(fā)送文字、圖片、文件、語(yǔ)音、視頻、消息緩存、消息存儲(chǔ)、消息未讀、已讀、撤回,離線消息、歷史消息、

    2024年01月24日
    瀏覽(28)
  • QML動(dòng)畫(huà)實(shí)戰(zhàn)指南:打造華麗且高性能的用戶界面動(dòng)效

    QML(Qt Meta-Object Language)是一種聲明式編程語(yǔ)言,用于設(shè)計(jì)和實(shí)現(xiàn)基于Qt的用戶界面。它允許開(kāi)發(fā)者以更簡(jiǎn)單、高效的方式創(chuàng)建動(dòng)態(tài)、響應(yīng)式的UI。Qt Quick是Qt的一個(gè)子模塊,提供了一套基于QML的UI開(kāi)發(fā)框架,可以方便地創(chuàng)建出跨平臺(tái)的圖形用戶界面。 動(dòng)畫(huà)在現(xiàn)代UI設(shè)計(jì)中占據(jù)著

    2024年02月09日
    瀏覽(42)
  • 客戶案例:高性能、大規(guī)模、高可靠的AIGC承載網(wǎng)絡(luò)

    客戶案例:高性能、大規(guī)模、高可靠的AIGC承載網(wǎng)絡(luò)

    客戶是一家AIGC領(lǐng)域的公司,他們通過(guò)構(gòu)建一套完整的內(nèi)容生產(chǎn)系統(tǒng),革新內(nèi)容創(chuàng)作過(guò)程,讓用戶以更低成本完成內(nèi)容創(chuàng)作。 RoCE的計(jì)算網(wǎng)絡(luò) RoCE存儲(chǔ)網(wǎng)絡(luò) 1.不少于600端口200G以太網(wǎng)接入端口,未來(lái)可擴(kuò)容至至少1280端口 1.不少于100端口200G以太網(wǎng)接入端口,未來(lái)可擴(kuò)容至至少240端

    2024年02月11日
    瀏覽(27)
  • 輕松掌握組件啟動(dòng)之Redis集群擴(kuò)展秘籍:輕松擴(kuò)容與縮容,釋放高性能潛能

    輕松掌握組件啟動(dòng)之Redis集群擴(kuò)展秘籍:輕松擴(kuò)容與縮容,釋放高性能潛能

    在我們?cè)嫉募夯A(chǔ)上,我們決定增加一臺(tái)主節(jié)點(diǎn)(8007)和一臺(tái)從節(jié)點(diǎn)(8008),這樣新增的節(jié)點(diǎn)將會(huì)在下圖中以虛線框的形式顯示在集群中。 1: 首先,在 /usr/local/redis-cluster 目錄下創(chuàng)建兩個(gè)文件夾,分別命名為 8007 和 8008。接下來(lái),將 8001 文件夾下的 redis.conf 文件復(fù)制到 8007 和

    2024年02月08日
    瀏覽(15)
  • [AIGC] Nginx:一個(gè)高性能的 Web 服務(wù)器和反向代理

    Nginx(engine x)是一個(gè)高性能的 Web 服務(wù)器和反向代理,它由 Igor Sysoev 于 2002 年開(kāi)發(fā),并于 2004 年首次發(fā)布為開(kāi)源軟件。Nginx 是當(dāng)今最受歡迎的 Web 服務(wù)器之一,它在互聯(lián)網(wǎng)上被廣泛使用,支持 millions 個(gè)網(wǎng)站和應(yīng)用程序。 Nginx 是一個(gè)免費(fèi)、開(kāi)源、高性能的 Web 服務(wù)器和反向代理

    2024年02月20日
    瀏覽(27)
  • 打造高性能網(wǎng)站:使用 nginx、MySQL 和 PHP 編譯,搭建 LNMP 環(huán)境并安裝 WordPress實(shí)戰(zhàn)

    打造高性能網(wǎng)站:使用 nginx、MySQL 和 PHP 編譯,搭建 LNMP 環(huán)境并安裝 WordPress實(shí)戰(zhàn)

    ??個(gè)人主頁(yè):我是沐風(fēng)曉月 ??個(gè)人簡(jiǎn)介:大家好,我是沐風(fēng)曉月,阿里云社區(qū)博客專(zhuān)家???? ?? 座右銘: 先努力成長(zhǎng)自己,再幫助更多的人 ,一起加油進(jìn)步?????? ??歡迎大家:這里是CSDN,我總結(jié)知識(shí)的地方,喜歡的話請(qǐng)三連,有問(wèn)題請(qǐng)私信?? 本次實(shí)驗(yàn)環(huán)境見(jiàn)下表

    2024年02月07日
    瀏覽(34)
  • AIGC靠GPU還是CPU?高性能計(jì)算兩大技術(shù)方向演變

    2023 年的 AI 產(chǎn)業(yè)可以用風(fēng)起云涌來(lái)形容。ChatGPT 的橫空出世讓生成式 AI 技術(shù)一夜之間紅遍全球,很多從未了解過(guò)人工智能的普通人也開(kāi)始對(duì)大模型產(chǎn)生了濃厚的興趣。媒體、調(diào)研機(jī)構(gòu)紛紛推出長(zhǎng)篇專(zhuān)題,論證 ChatGPT、StableDiffusion、Midjourney 等文本和圖像大模型會(huì)對(duì)哪些行業(yè)產(chǎn)生

    2024年02月12日
    瀏覽(21)
  • Nginx 入門(mén)指南:從入門(mén)到放棄(不是!)從零開(kāi)始掌握高性能 Web 服務(wù)器

    Nginx 可以構(gòu)建高性能、可靠的 Web 服務(wù)器。本文將帶你了解 Nginx 的基本概念、安裝方法以及常見(jiàn)配置,讓你快速上手并搭建自己的 Web 服務(wù)器。 隨著互聯(lián)網(wǎng)的發(fā)展,構(gòu)建穩(wěn)定、高性能的 Web 服務(wù)器成為了許多開(kāi)發(fā)者的重要需求。而在眾多的服務(wù)器軟件中, Nginx 以其出色的性能

    2024年04月15日
    瀏覽(25)
  • 高性能JavaScript——6、快速響應(yīng)的用戶界面

    高性能JavaScript——6、快速響應(yīng)的用戶界面

    大多數(shù)瀏覽器讓一個(gè)單線程共用于執(zhí)行JavaScript和更新用戶界面。每個(gè)時(shí)刻只能執(zhí)行其中一種操作,這意味著當(dāng)JavaScript代碼正在執(zhí)行時(shí)用戶界面無(wú)法響應(yīng)輸入,反之亦然。當(dāng)JavaScript代碼執(zhí)行時(shí),用戶界面處于“鎖定”狀態(tài)。管理好JavaScript的運(yùn)行時(shí)間對(duì)Web應(yīng)用的性能非常重要。

    2024年04月17日
    瀏覽(16)
  • JAMstack架構(gòu):快速構(gòu)建安全、高性能的現(xiàn)代應(yīng)用

    JAMstack架構(gòu):快速構(gòu)建安全、高性能的現(xiàn)代應(yīng)用

    隨著Web應(yīng)用的快速發(fā)展,開(kāi)發(fā)者們?cè)趯ふ腋痈咝?、安全和可維護(hù)的應(yīng)用架構(gòu)。JAMstack架構(gòu)應(yīng)運(yùn)而生,它通過(guò)將前端、后端和部署過(guò)程分離,提供了一種現(xiàn)代化的方式來(lái)構(gòu)建Web應(yīng)用。在本文中,我們將深入探討JAMstack架構(gòu)的特點(diǎn)、優(yōu)勢(shì)以及使用場(chǎng)景。 什么是 JAMstack 架構(gòu)? JA

    2024年02月11日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包