欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Netty入门(一)环境搭建及使用

发布时间:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Netty入门(一)环境搭建及使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、项目创建

  在 Eclipse 中右键,新建->项目->Maven->Maven Project->下一步->选择 quickstart

  

  下一步->设置如图(参数自取)

  

  点击完成。

   项目会自动创建 pom.xml 文件,打开该文件,点击 Dependencies标签->Add..,设置如图(参数由 Netty 版本决定):

  

  点击 OK,保存文件,观察 Maven Dependencies 下,

  

  netty 的 jar 包已经添加完毕。到此为止,项目配置完毕了,下面就来添加代码吧。

 

二、实现一个简单的服务端 demo

1. 首选我们需要自定义一个类处理服务器接收到的消息

1 package com.coder.server;2 3 import io.netty.buffer.ByteBuf;4 import io.netty.channel.ChannelHandlerContext;5 import io.netty.channel.ChannelInboundHandlerAdapter;6 import io.netty.util.CharsetUtil;7 import io.netty.util.ReferenceCountUtil;8 9 /** 10 * 输出接收到的消息 11 * @author Coder 12 * 13 */ 14 public class HelloServerHandler extends ChannelInboundHandlerAdapter { 15 /** 16 * 收到数据时调用 17 */ 18 @Override 19 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 20 try { 21 ByteBuf in = (ByteBuf)msg; 22 System.out.print(in.toString(CharsetUtil.UTF_8)); 23 } finally { 24 // 抛弃收到的数据 25 ReferenceCountUtil.release(msg); 26 } 27 28 // ctx.write(msg); 29 // ctx.flush(); 30 } 31 32 /** 33 * 当Netty由于IO错误或者处理器在处理事件时抛出异常时调用 34 */ 35 @Override 36 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 37 // 当出现异常就关闭连接 38 cause.printStackTrace(); 39 ctx.close(); 40 } 41 }

  该类主要是实现了接收客户端发来的消息,并输出到控制台。

 

2. 然后我们就能实现一个简单的服务端程序了

  Netty 服务器的通信步骤为:

  •  创建两个NIO线程组,一个专门用于接收来自客户端的连接,另一个则用于处理已经被接收的连接。
  •  创建一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等。
  •  创建一个用于实际处理数据的类ChannelInitializer,进行初始化的准备工作,比如设置接受传出数据的字符集、格式以及实际处理数据的接口。
  •  绑定端口,执行同步阻塞方法等待服务器端启动即可。
  • 1 package com.coder.server;2 3 import io.netty.bootstrap.ServerBootstrap;4 import io.netty.channel.ChannelFuture;5 import io.netty.channel.ChannelInitializer;6 import io.netty.channel.ChannelOption;7 import io.netty.channel.EventLoopGroup;8 import io.netty.channel.nio.NioEventLoopGroup;9 import io.netty.channel.socket.SocketChannel; 10 import io.netty.channel.socket.nio.NioServerSocketChannel; 11 12 public class HelloServer { 13 private int port; 14 15 public HelloServer(int port) { 16 this.port = port; 17 } 18 19 public void run() throws Exception { 20 EventLoopGroup bossGroup = new NioEventLoopGroup(); // 用来接收进来的连接 21 EventLoopGroup workerGroup = new NioEventLoopGroup(); // 用来处理已经被接收的连接 22 System.out.println("准备运行端口:" + port); 23 24 try { 25 ServerBootstrap b = new ServerBootstrap(); 26 b.group(bossGroup, workerGroup) 27 .channel(NioServerSocketChannel.class) // 这里告诉Channel如何接收新的连接 28 .childHandler( new ChannelInitializer<SocketChannel>() { 29 @Override 30 protected void initChannel(SocketChannel ch) throws Exception { 31 // 自定义处理类 32 ch.pipeline().addLast(new HelloServerHandler()); 33 } 34 }) 35 .option(ChannelOption.SO_BACKLOG, 128) 36 .childOption(ChannelOption.SO_KEEPALIVE, true); 37 38 // 绑定端口,开始接收进来的连接 39 ChannelFuture f = b.bind(port).sync(); 40 41 // 等待服务器socket关闭 42 f.channel().closeFuture().sync(); 43 } catch (Exception e) { 44 workerGroup.shutdownGracefully(); 45 bossGroup.shutdownGracefully(); 46 } 47 } 48 49 public static void main(String[] args) throws Exception { 50 int port = 10110; 51 new HelloServer(port).run(); 52 } 53 54 }

       那么,这便是一个可执行的服务端程序了。运行后控制台输出如下:

      

     

    三、测试 

       我们可以去自定义客户端程序,这里为了方便使用 telnet 充当客户端。

      需要注意的是,Windows 默认是没有开启 telnet 客户端的,需要我们手动开启。

      菜单->控制面板->程序->打开或关闭Windows功能,设置如图:

      

      这样我们就能用 telnet 客户端了。

      在 cmd 窗口输入命令如下:

      

      打开窗口如下:

      

      这时候我们在该窗口输入什么,eclipse 控制台也会对应输出相应内容。如下:

      

      注意:telnet 窗口会看不到输入的字符,只要输入 ctrl+L 就可以看到输入的字符了。

    总结

    以上是生活随笔为你收集整理的Netty入门(一)环境搭建及使用的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。