netty如何处理多个handler,如何处理netty粘包和分包数据
注:内容来自于Netty 权威指南第二版
1、netty最基本的服务端、客户端 public void start() throws InterruptedException { /*线程组*/ //用于接收客户端的链接 EventLoopGroup bossGroup = new NioEventLoopGroup(); //处理IO相关的读写操作,或者执行系统Task、定时任务Task等 EventLoopGroup workGroup= new NioEventLoopGroup(); try { /*客户端启动必备,服务端使用ServerBootstrap*/ Bootstrap b = new Bootstrap(); b.group(bossGroup ,workGroup) /*指明使用NIO进行网络通讯*/ .channel(NioSocketChannel.class) /*配置远程服务器的地址,服务器端就是配置LocalAdderss*/ .remoteAddress(new InetSocketAddress(host,port)) //这里配置我们自定义的handler,netty主要就是写各种各样的handler .handler(new EchoClientHandler()); /*连接到远程节点,阻塞等待直到连接完成*/ ChannelFuture f = b.connect().sync(); /*阻塞,直到channel关闭*/ f.channel().closeFuture().sync(); } finally { //阻塞关闭线程组 group.shutdownGracefully().sync(); } }可以看到代码中b.group(bossGroup ,workGroup),添加了个两个group,刚开始学习一直不明白为什么,看了书之后才能够明白。
bossGroup:用于接收客户端的链接
接收客户端TCP链接,初始化Channel参数将链路状态变更时间通知给ChannelPipelineworkGroup:用于处理I/O相关的读写操作,或者执行系统Task、定时任务Task等
异步读取通信对端的数据报,发送读时间到ChannelPipeline异步发送消息到通信对端,调用channelPipeline的消息发送接口执行系统调用task执行定式任务Task,例如链路空闲状态监测定式任务。