1、我们在使用netty的是有都会存在将channelBuffer的数据处理成相应的String或者自定义数据。而这里主要是介绍管道里面存在的上行和下行的数据处理方式

  2、通过一张图片来看一下具体管道中的实现过程

  

  一个Channel中包括一个Socket、一个ChannelPipeline。一个ChannelPipeline中有一个ChannelSink和多个ChannelHandler。ChannelHandler分为两种:UpstremHandler、DownstreamHandler。

  不论是读数据还是写数据都要经过Channel中的ChannelPipeline。读数据的过程是从Socket到ChannelPipeline,由ChannelPipeline交给里面的UpstreamHandler(或者叫做InBoundHandler)从下到上依次处理 。写数据时,由要经过ChannelPipeline里面在DownStreamHandler(或者是OutBoundHandler)由上到下依次处理。

  3、因为UpstremHandler与DownstreamHandler的实现方式大同小异,我这里写的例子是UpstremHandler的例子

package com.troy.application.upstream;import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.timeout.IdleStateHandler;
import org.jboss.netty.util.HashedWheelTimer;import java.net.InetSocketAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Server {public static void main(String[] args) {//声明服务类ServerBootstrap serverBootstrap = new ServerBootstrap();//设定线程池ExecutorService boss = Executors.newCachedThreadPool();ExecutorService work = Executors.newCachedThreadPool();//设置工厂serverBootstrap.setFactory(new NioServerSocketChannelFactory(boss,work));//设置管道流serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline channelPipeline = Channels.pipeline();//添加处理方式channelPipeline.addLast("idle",new IdleStateHandler(new HashedWheelTimer(),5,5,10));channelPipeline.addLast("handler1",new Handler1());channelPipeline.addLast("handler2",new Handler2());return channelPipeline;}});//设置端口serverBootstrap.bind(new InetSocketAddress(9000));}
}

package com.troy.application.upstream;import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.UpstreamMessageEvent;public class Handler1 extends SimpleChannelHandler {@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {ChannelBuffer channelBuffer = (ChannelBuffer) e.getMessage();byte[] array = channelBuffer.array();String message = new String(array);System.out.println("handler1"+message);ctx.sendUpstream(new UpstreamMessageEvent(ctx.getChannel(),message,e.getRemoteAddress()));}
}

package com.troy.application.upstream;import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;public class Handler2 extends SimpleChannelHandler {@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {String message = (String) e.getMessage();System.out.println("handler2"+message);}
}

  说明:这里最重要的两个方法是sendUpstream和sendDownstream。这两个方式在上行和下行的处理基本上是一样的。在源码里面handler的处理都会存在sendUpstream和sendDownstream。这个两个方法也是多重处理的基础。

转载于:https://www.cnblogs.com/ll409546297/p/8041872.html

netty之管道处理流程相关推荐

  1. Netty 快速开始(netty websocket客户端使用流程)

    文章目录 一.网络IO的基本知识与概念 1. 同步.异步.阻塞.非阻塞概念 2. IO模型 3. NIO和IO有什么区别? 4. Java NIO 工作流程 二.netty 1. 什么是netty? ...

  2. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

  3. 服务端_说说Netty服务端启动流程

    点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://yeming.me/2016/03/12/netty1/ netty服务端代码分析 服务端启动配置 ...

  4. Netty开发的基本流程及关键类说明

  5. 二、Netty服务端/客户端启动整体流程

    一.综述 Netty 的整体流程相对来说还是比较复杂的,初学者往往会被绕晕.所以这里总结了一下整体的流程,从而对 Netty 的整体服务流程有一个大致的了解.从功能上,流程可以分为服务启动.建立连接. ...

  6. Netty基本使用流程代码

    下面的代码是Netty基本的使用流程代码,几乎Netty的使用都是使用下面的流程,这是一个HttpServer的简单应用,它将返回"Hello world"给客户端,复制修改以快速 ...

  7. Netty实战 IM即时通讯系统(五)客户端启动流程

    ## Netty实战 IM即时通讯系统(五)客户端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...

  8. Netty框架Bind流程浅析

    Netty简介: Netty是JBOSS 基于Java NIO开源的提供异步.事件驱动的网络通信框架,用于开发高性能网络服务器 Zookeeper RocketMq Dubbo ShardingSph ...

  9. Netty 学习和进阶策略

    https://www.infoq.cn/article/xt9*7K4fJktiuWTLYrZS 背景 Netty 框架的特点 Netty 的一个特点就是入门相对比较容易,但是真正掌握并精通是非常困 ...

最新文章

  1. 优化XCode的编译速度
  2. C语言字符串排序!_只愿与一人十指紧扣_新浪博客
  3. php实现tcp连接esp8266,ESP8266之TCP透传
  4. golang切片传参
  5. MATLAB基本操作(九):可视化矩阵的矢量场quiver函数
  6. 飞鸽传书2012发展触摸屏技术发展迅猛
  7. 程序员接私活平台_程序员去哪儿接私活?我系统总结了15个国内平台,绝对靠谱...
  8. 张亚勤退休百度,技术客回归学术
  9. mysql动态调整jndi_tomcat6.0 JNDI MYSQL设置
  10. 只显示小方格_excel中最有效率的插件——方方格子
  11. docker任务调度工具: ofelia
  12. 关于Mysql修改密码的方法汇总
  13. Android的JNI【实战教程】1⃣️--java和c/c++的那些事
  14. java change方法作用_程序员必看之Java中方法的参数传递问题
  15. iis 设置php静态,PHP的Rewrite静态化服务器配置(包括IIS的静态华配置)
  16. Swiper.js实现无缝滚动
  17. 编写函数 int min(int x ,int y,int z),实现求出三个数中的最小值。要求在main函数中输入三个整数,然后调用min函数,最后将求得的最小值输出。
  18. 区块链改革(链改)全国行动委员会第一次会议胜利召开
  19. MySQL的enclosed-by和escaped-by
  20. 基层管理者必备的能力和素质

热门文章

  1. 设计模式笔记(10)---装饰模式(结构型)
  2. 简记GAN网络的loss
  3. NetScaler配置只允许某个组访问桌面
  4. 2018.12.27|区块链技术头条
  5. 第27章 正则表达式
  6. springboot学习笔记-5 springboot整合shiro
  7. Ubuntu下安装Hadoop
  8. 如何从一台铅封计算机上取走数据
  9. 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃
  10. 树莓派android p,Android P最新测试版带来更多的UI和图标方面的改进