Netty5 入门HelloWorld

Netty5 入门HelloWorld
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

Netty5 入门HelloWorld

一、客户端代码及关键类说明

 1 /**
 2  * netty5的客户端
 3  * @author -zhengzx-
 4  *
 5  */
 6 public class ClientSocket {
 7 
 8     public static void main(String[] args) {
 9         //服务类
10         Bootstrap bootstrap = new Bootstrap();
11         //worker
12         EventLoopGroup worker = new NioEventLoopGroup();
13         
14         try {
15             //设置线程池
16             bootstrap.group(worker);
17             //设置socket工厂
18             bootstrap.channel(NioSocketChannel.class);
19             //设置管道
20             bootstrap.handler(new ChannelInitializer<Channel>() {
21 
22                 @Override
23                 protected void initChannel(Channel ch) throws Exception {
24                     ch.pipeline().addLast(new StringDecoder());
25                     ch.pipeline().addLast(new StringEncoder());
26                     ch.pipeline().addLast(new ClientSocketHandler());
27                 }
28             });
29             
30             ChannelFuture connect = bootstrap.connect("127.0.0.1", 10101);
31             
32             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
33             while(true){
34                 System.out.println("请输入:");
35                 String msg = bufferedReader.readLine();
36                 connect.channel().writeAndFlush(msg);
37             }
38             
39         } catch (Exception e) {
40              e.printStackTrace();
41         } finally{
42             worker.shutdownGracefully();
43         }
44     }
45 }
【1】**EventLoopGroup:**`客服端需要指定 EvnetLoopGroup,Netty5 中实例为 NioEventLoopGroup:表示一个 NIO 的EvnetLoopGroup。
`【2】**ChannelType:**`指定 Channel 的类型,客户端为 NioSocketChannel。在 Netty 中,,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否连接还是断开) 以及对 Socket 的读写等操作。每当 Netty 建立了一个连接后, 都会有一个对应的 Channel 实例。
`【3】**Handler:**设置数据的处理类。
1 public class ClientSocketHandler extends SimpleChannelInboundHandler<String>{
2 
3     @Override
4     protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
5         System.out.println("客户端接受消息:"+msg);
6     }
7 }

【4】**ChannelPipeline:**在实例化一个 Channel 时,必然伴随着实例化一个 ChannelPipeline。

二、服务端代码及说明

【1】**EventLoopGroup:**不论是服务器端还是客户端,都必须指定 EventLoopGroup. 在这个例子中, 指定了NioEventLoopGroup, 表示一个 NIO 的 EventLoopGroup, 不过服务器端需要指定两个 EventLoopGroup, 一个是 bossGroup, 用于处理客户端的连接请求; 另一个是 workerGroup, 用于处理与各个客户端连接的 IO 操作。
【2】**ChannelType:**指定 Channel 的类型. 因为是服务器端, 因此使用了 NioServerSocketChannel。
【3】**Handler:**设置数据的处理器。

 1 public class ServerSocketHandler extends SimpleChannelInboundHandler<String>{
 2 
 3     @Override
 4     protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
 5         System.out.println(msg);
 6         //返回字符串
 7         ctx.writeAndFlush("hi");
 8     }
 9     
10 }
本文来源程序猿进阶,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/8312

发表评论