Netty实战教程:如何构建高效Netty服务器架构?

2026-05-25 22:091阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1258个文字,预计阅读时间需要6分钟。

Netty实战教程:如何构建高效Netty服务器架构?

目录

一、Netty 是什么?

二、Hello Netty

三、代码实例

1. Maven 中添加 netty-all 2. 主程序类 MyNettyServerTest 3. 初始化器 MyNettyServerInitializer 4. 自定义处理器 MyNettyServerHandler 5. 通过 curl 访问 http://localhost

目录
  • 一、Netty是什么
  • 二、Hello Netty
  • 三、代码实例
    • 1、maven中加入netty-all
    • 2、主程序类MyNettyServerTest
    • 3、初始化器MyNettyServerInitializer
    • 4、自定义处理器MyNettyServerHandler
    • 5、通过curl localhost:8080访问Netty服务
  • 四、curl不是内部或外部命令
    • 五、重写SimpleChannelInboundHandler中一些重要的回调方法
      • 1、重写回调方法
      • 2、通过curl localhost:8080访问Netty服务
      • 3、控制台输出
      • 4、ctrl + c停止访问

    一、Netty是什么

    Netty是JBOSS开源的一款NIO网络编程框架,可用于快速开发网络的应用。Netty是一个异步的、基于事件驱动的网络应用框架,用于快速开发高性能的服务端和客户端。可以极大的简化基于TCP、UDP等协议的网络服务。并且Netty对于各种传输类型(阻塞或非阻塞式的socket)、通信方式(HTTP或websocket)都提供了统一的API接口,提供了灵活的可扩展性,高度可自定义的线程模型(多线程、线程池等),支持使用无连接的数据报UDP进行通信,具有高吞吐量、低延迟、资源消耗低、最低限度的内存复制等特性。除了优越的性能外,Netty还支持SSL/TLS和StartTLS等加密传输协议,保证了数据传输的安全性。

    在实际使用时,Netty可以作为Socket编程的中间件;也可以和Protobuf技术结合使用,实现一个RPC框架,实现远程过程调用;也可以作为一个websocket的长链接服务器,实现客户端和服务端的长连接通信。

    二、Hello Netty

    使用Netty作为一个Web服务器,用于接收用户请求并给出响应。

    Netty程序一般都是按套路来写,依次编写主程序类、自定义初始化器、自定义处理器。

    1、主程序类MyNettyServerTest

    通过ServerBootstrap注册serverGroup和clientGroup两个事件循环组,其中serverGroup用于获取客户端连接,clientGroup用于处理客户端连接,类似于常见的Master-Slave结构。

    2、初始化器MyNettyServerInitializer

    继承Netty提供的初始化器ChannelInitializer。

    Netty封装了各种各样的内置处理器,用于实现各种功能。并且ChannelInitializer的initChannel()方法会在某一个连接注册到Channel后立即被触发调用。因此,可以根据业务需求,在initChannel()中添加若干个Netty内置处理器,利用Netty强大的类库直接处理大部分业务。最后再在initChannel()中添加一个自定义处理器,用于实现特定业务的具体功能。

    3、自定义处理器MyNettyServerHandler

    继承SimpleChannelInboundHandler,该父类的channelRead0()方法可以接收客户端的所有请求,并作出响应,输出“Hello Netty”。

    简单讲,Netty程序就是通过主程序类关联自定义初始化器,然后在初始化器中加入Netty内置处理器和自定义处理器,最后在自定义处理器中编写处理特定需求的业务代码。

    Netty实战教程:如何构建高效Netty服务器架构?

    三、代码实例

    1、maven中加入netty-all

    <!-- mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.68.Final</version> </dependency>

    2、主程序类MyNettyServerTest

    package com.guor.demo.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; /** * 主程序类 */ public class MyNettyServerTest { public static void main(String[] args) throws InterruptedException { /** * EventLoopGroup:事件循环组,是一个线程池,也是一个死循环,用于不断地接收用户请求; * serverGroup:用户监听及建立连接,并把每一个连接抽象为一个channel,最后再将连接交给clientGroup处理; * clientGroup:真正的处理连接 */ EventLoopGroup serverGroup = new NioEventLoopGroup(); EventLoopGroup clientGroup = new NioEventLoopGroup(); try { // 服务端启动时的初始化操作 ServerBootstrap serverBootstrap = new ServerBootstrap(); // 1、将serverGroup和clientGroup注册到服务端的Channel上; // 2、注册一个服务端的初始化器MyNettyServerInitializer; // 3、该初始化器中的initChannel()方法会在连接被注册到Channel后立刻执行; // 5、最后将端口号绑定到8080; ChannelFuture channelFuture = serverBootstrap.group(serverGroup, clientGroup) .channel(NioServerSocketChannel.class) .childHandler(new MyNettyServerInitializer()).bind(8080).sync(); channelFuture.channel().closeFuture().sync(); }catch (Exception e){ System.out.println(e); }finally { serverGroup.shutdownGracefully(); clientGroup.shutdownGracefully(); } } }

    3、初始化器MyNettyServerInitializer

    package com.guor.demo.netty; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.localhost:8080访问Netty服务

    此时,可能会提示curl不是内部或外部命令,如何解决?

    四、curl不是内部或外部命令

    1、下载curl for 64-bit

    curl.se/windows/

    2、将zip解压到文件夹

    3、在环境变量中配置

    五、重写SimpleChannelInboundHandler中一些重要的回调方法

    1、重写回调方法

    package com.guor.demo.netty; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.localhost:8080访问Netty服务

    3、控制台输出

    4、ctrl + c停止访问

    以上就是Netty网络编程实战之搭建Netty服务器的详细内容,更多关于搭建Netty服务器的资料请关注自由互联其它相关文章!

    本文共计1258个文字,预计阅读时间需要6分钟。

    Netty实战教程:如何构建高效Netty服务器架构?

    目录

    一、Netty 是什么?

    二、Hello Netty

    三、代码实例

    1. Maven 中添加 netty-all 2. 主程序类 MyNettyServerTest 3. 初始化器 MyNettyServerInitializer 4. 自定义处理器 MyNettyServerHandler 5. 通过 curl 访问 http://localhost

    目录
    • 一、Netty是什么
    • 二、Hello Netty
    • 三、代码实例
      • 1、maven中加入netty-all
      • 2、主程序类MyNettyServerTest
      • 3、初始化器MyNettyServerInitializer
      • 4、自定义处理器MyNettyServerHandler
      • 5、通过curl localhost:8080访问Netty服务
    • 四、curl不是内部或外部命令
      • 五、重写SimpleChannelInboundHandler中一些重要的回调方法
        • 1、重写回调方法
        • 2、通过curl localhost:8080访问Netty服务
        • 3、控制台输出
        • 4、ctrl + c停止访问

      一、Netty是什么

      Netty是JBOSS开源的一款NIO网络编程框架,可用于快速开发网络的应用。Netty是一个异步的、基于事件驱动的网络应用框架,用于快速开发高性能的服务端和客户端。可以极大的简化基于TCP、UDP等协议的网络服务。并且Netty对于各种传输类型(阻塞或非阻塞式的socket)、通信方式(HTTP或websocket)都提供了统一的API接口,提供了灵活的可扩展性,高度可自定义的线程模型(多线程、线程池等),支持使用无连接的数据报UDP进行通信,具有高吞吐量、低延迟、资源消耗低、最低限度的内存复制等特性。除了优越的性能外,Netty还支持SSL/TLS和StartTLS等加密传输协议,保证了数据传输的安全性。

      在实际使用时,Netty可以作为Socket编程的中间件;也可以和Protobuf技术结合使用,实现一个RPC框架,实现远程过程调用;也可以作为一个websocket的长链接服务器,实现客户端和服务端的长连接通信。

      二、Hello Netty

      使用Netty作为一个Web服务器,用于接收用户请求并给出响应。

      Netty程序一般都是按套路来写,依次编写主程序类、自定义初始化器、自定义处理器。

      1、主程序类MyNettyServerTest

      通过ServerBootstrap注册serverGroup和clientGroup两个事件循环组,其中serverGroup用于获取客户端连接,clientGroup用于处理客户端连接,类似于常见的Master-Slave结构。

      2、初始化器MyNettyServerInitializer

      继承Netty提供的初始化器ChannelInitializer。

      Netty封装了各种各样的内置处理器,用于实现各种功能。并且ChannelInitializer的initChannel()方法会在某一个连接注册到Channel后立即被触发调用。因此,可以根据业务需求,在initChannel()中添加若干个Netty内置处理器,利用Netty强大的类库直接处理大部分业务。最后再在initChannel()中添加一个自定义处理器,用于实现特定业务的具体功能。

      3、自定义处理器MyNettyServerHandler

      继承SimpleChannelInboundHandler,该父类的channelRead0()方法可以接收客户端的所有请求,并作出响应,输出“Hello Netty”。

      简单讲,Netty程序就是通过主程序类关联自定义初始化器,然后在初始化器中加入Netty内置处理器和自定义处理器,最后在自定义处理器中编写处理特定需求的业务代码。

      Netty实战教程:如何构建高效Netty服务器架构?

      三、代码实例

      1、maven中加入netty-all

      <!-- mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.68.Final</version> </dependency>

      2、主程序类MyNettyServerTest

      package com.guor.demo.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; /** * 主程序类 */ public class MyNettyServerTest { public static void main(String[] args) throws InterruptedException { /** * EventLoopGroup:事件循环组,是一个线程池,也是一个死循环,用于不断地接收用户请求; * serverGroup:用户监听及建立连接,并把每一个连接抽象为一个channel,最后再将连接交给clientGroup处理; * clientGroup:真正的处理连接 */ EventLoopGroup serverGroup = new NioEventLoopGroup(); EventLoopGroup clientGroup = new NioEventLoopGroup(); try { // 服务端启动时的初始化操作 ServerBootstrap serverBootstrap = new ServerBootstrap(); // 1、将serverGroup和clientGroup注册到服务端的Channel上; // 2、注册一个服务端的初始化器MyNettyServerInitializer; // 3、该初始化器中的initChannel()方法会在连接被注册到Channel后立刻执行; // 5、最后将端口号绑定到8080; ChannelFuture channelFuture = serverBootstrap.group(serverGroup, clientGroup) .channel(NioServerSocketChannel.class) .childHandler(new MyNettyServerInitializer()).bind(8080).sync(); channelFuture.channel().closeFuture().sync(); }catch (Exception e){ System.out.println(e); }finally { serverGroup.shutdownGracefully(); clientGroup.shutdownGracefully(); } } }

      3、初始化器MyNettyServerInitializer

      package com.guor.demo.netty; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.localhost:8080访问Netty服务

      此时,可能会提示curl不是内部或外部命令,如何解决?

      四、curl不是内部或外部命令

      1、下载curl for 64-bit

      curl.se/windows/

      2、将zip解压到文件夹

      3、在环境变量中配置

      五、重写SimpleChannelInboundHandler中一些重要的回调方法

      1、重写回调方法

      package com.guor.demo.netty; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.localhost:8080访问Netty服务

      3、控制台输出

      4、ctrl + c停止访问

      以上就是Netty网络编程实战之搭建Netty服务器的详细内容,更多关于搭建Netty服务器的资料请关注自由互联其它相关文章!