java Netty 之 白话概念
ChannelEvent
先说这个ChannelEvent,因为Netty是基于事件驱动的,就是我们上文提到的,发生什么事,就通知"有关部门"。所以,不难理解,我们自己的业务代码中,一定有跟这些事件相关的处理。在样例代码,我们处理的事件,就是channelConnected。以后,我们还会处理更多的事件。
ChannelEvent是和这个Channel相关的IO事件和请求,会由各个ChannelHandler来处理。事件分为上行和下行两种:
- 当服务器从客户端收到一个消息,那么与之相关的就是一个上行事件(upstream event),流水线中的UpstreamChannelHandler会处理它。
- 如果服务要回应这个客户端,那么与响应消息对应的就是下行事件,pipeline中的DownstreamChannelHandler会处理。站在客户端角度同样很容易理解。
上行事件通常是入站操作(inbound operations)的结果,如 InputStream.read(byte[]),下行事件通常是请求出站操作( outbound operations)比如 OutputStream.write(byte[]), Socket.connect(SocketAddress), and Socket.close()。
上行事件及发生时机:
对于可以有子通道的Channel(如ServerSocketChannel)而言可以有下面俩事件。
下行事件及发生时机:
ChannelPipeline
Pipeline,翻译成中文的意思是:管道,传输途径。也就是说,在这里他是控制ChannelEvent事件分发和传递的。事件在管道中流转,第一站到哪,第二站到哪,到哪是终点,就是用这个ChannelPipeline 处理的。比如:开发事件。先给A设计,然后给B开发。这里最主要工作的就是ChannelPipelineFactory。
ChannelHandler
刚说Pipeline负责把事件分发到相应的站点,那么这个站点在Netty里,就是指ChannelHandler。事件到了ChannelHandler这里,就要被具体的进行处理了,我们的样例代码里,实现的就是这样一个处理事件的“站点”,也就是说,你自己的业务逻辑一般都是从这里开始的。其实说白了,ChannelHandler就是Filter,请求经过多个Filter,就能到达我们业务逻辑ChannelHandler。
下面是一个流程图,请求从下面发送出来,经过UpStream Handler,到了业务逻辑层执行完后,通过DownStream Handler返回给客户端。说白了,
注意:
我们可以建自己的ChannelHandler,要继承SimpleChannelHandler。
Channel
有了个部门的协调处理,我们还需要一个从整体把握形势的,所谓“大局观”的部门,channel。
channel,能够告诉你当前通道的状态,是连同还是关闭。获取通道相关的配置信息。得到Pipeline等。是一些全局的信息。Channel自然是由ChannelFactory产生的。Channel的实现类型,决定了你这个通道是同步的还是异步的(nio)。
参考:
http://blog.csdn.net/kobejayandy/article/details/11493979
http://www.it165.net/pro/html/201207/3142.html
相关推荐
通过Netty4 获取串口数据并且下发数据到串口,是一个封装不错的框架
java netty权威指南完整版带目录java netty权威指南完整版带目录java netty权威指南完整版带目录java netty权威指南完整版带目录java netty权威指南完整版带目录
基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于...
SCANFISH-II 型声呐系统数据接口协议,对接tcp转发app,json封装
JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA...
基于tcp通讯,涉及java的netty服务器的推送功能和c++socket的封装以及protobuf在java和c++中的使用。
java netty需要的包。。。。。。。。。。。。java netty需要的包,netty-3.2.10.Final.jar一个就行
java实现基于netty 的utp字节数据接收服务,服务具体实现代码。样例java实现基于netty 的utp字节数据接收服务,服务具体实现代码。样例
JAVA netty完整示例代码。里面包括整个项目和所需的JAR包。示例以:TCP/IP自定义报文协议进行解析分析,基于帧头HEAD_DATA=0x76解析过程的示例代码,并对数据进行粘包分离的处理。粘包处理方式有两种:1.自定义报文...
做Java开发,现在很多场合需要分布式应用,很多通信框架的底层实现都包含Netty技术,为了更好了解,值得有兴趣的人研究一下
实现Java服务端和C#客户端联通 Java使用Netty 开发环境为IDEA C#使用DotNetty 开发环境为VS2017 运行时先开启Java服务端 再开启客户端
高性能的网络服务器,Java 开发学习进阶
JAVA采用Netty库实现基于以DTU传输的TCP服务器 ,可以支持多端口通讯 ,同时也支持 多协议解析
在java中,netty通信业务。代码实现
java应用netty服务端和客户端示例,客户端和服务端的model对象目录必须一致
java Netty MMO 回合制网络游戏;基于 ioGame 网络编程框架开发的 MMO 类型的回合制网络游戏项目.zip java Netty MMO 回合制网络游戏;基于 ioGame 网络编程框架开发的 MMO 类型的回合制网络游戏项目.zip java Netty...
经过本人测试通过,少走弯路
Java Netty版完全符合JT808部标文档的开发规范。直接可以下载使用,不信拉倒。
自开发的远程桌面控制应用,仅出于兴趣爱好,详情请见:https://github.com/Cool-Coding/remote-desktop-control 喜欢的话请点Star持续关注,也欢迎提issues。
Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发,已用于生产环境 技术体系:(使用 netty 实现通信及协议解析,使用 nutzboot 提供依赖注入及属性配置,使用 redis 实现消息缓存,集群,使用 ...