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
相关推荐
Java Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在标题中提到的“JAVA Netty 获取串口数据并且下发数据”,这意味着我们将探讨如何利用Netty来处理串行...
Java Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高效的网络服务,包括TCP、UDP等网络协议的应用。在"基于Java Netty的UDP客户端声呐数据对接"项目中,我们主要关注如何利用Netty处理UDP通信,...
基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于 Java Netty实现的可用于内网穿透的代理工具.zip基于...
2. **Netty的基本概念** - 事件驱动模型:Netty采用基于事件的模型,通过EventLoop(事件循环)处理I/O事件,提高了并发性能。 - ByteBuf:Netty的内存管理机制,比Java的ByteBuffer更高效,支持零拷贝。 - ...
Java Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"Java Netty基于对象数据传输Demo"应该是演示了如何使用Netty进行对象序列化和反序列化,以便在网络...
Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用程序框架,专为开发协议服务器和客户端而设计。它的核心是基于 NIO(非阻塞 I/O)模型,提供了丰富的 API 和高度可定制的组件,使得开发者能够快速、高效地...
本话题将探讨如何使用C++客户端与Java(通过Netty框架)服务器端实现TCP通讯,并涉及数据序列化工具Protocol Buffers(protobuf)在两者之间的交互。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节...
在实际的Netty应用中,你可能还会遇到以下概念: - **ByteBuf**:Netty的缓冲区,高效且可复用,用于数据读写。 - **Decoder** 和 **Encoder**:用于数据的解码和编码,比如将接收到的字节流转换为业务对象,或将...
Netty的架构设计包含了以下几个核心概念: 1. EventLoop(事件循环):负责监听网络事件并执行相应的回调函数。在Netty中,一个EventLoop通常会处理多个连接,即实现了一个连接对应一个事件处理线程的模型。这种...
JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA...
Channel是Netty的核心概念,代表一个网络连接,可以用来读写数据。Handler是处理I/O事件的组件,通过ChannelPipeline进行链式调用,实现业务逻辑。 3. **ByteBuf** Netty的ByteBuf是代替Java NIO ByteBuffer的,...
标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...
java netty需要的包。。。。。。。。。。。。java netty需要的包,netty-3.2.10.Final.jar一个就行
在Java编程环境中,Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于构建可伸缩、高并发的服务器。本示例关注的是如何利用Netty实现一个基于UDP(User Datagram Protocol)的数据接收服务,这在需要进行...
然而,Netty的强大之处还在于它的高度可扩展性和丰富的功能,如流式API、零拷贝、多协议支持、以及对异步编程的良好支持。在更复杂的网络应用中,开发者可以利用这些特性来优化性能、提高代码可维护性。
JAVA netty完整示例代码。里面包括整个项目和所需的JAR包。示例以:TCP/IP自定义报文协议进行解析分析,基于帧头HEAD_DATA=0x76解析过程的示例代码,并对数据进行粘包分离的处理。粘包处理方式有两种:1.自定义报文...
在Java中,我们通常不直接与DTU硬件打交道,而是通过模拟DTU协议来处理与之交互的数据。 Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发高并发、低延迟的网络服务。它提供了丰富的API,使得开发者能更...
这个学习资料包“java netty学习资料”很可能是为了帮助开发者理解和掌握Netty的核心概念和实践应用。 在Netty中,定义消息协议通讯是构建网络应用的关键步骤。Netty提供了一种灵活的方式来定义自定义的编解码器,...
毕设:基于Java Netty 实现的多人联机游戏(多人对战)的客户端和服务器端.zip 毕设:基于Java Netty 实现的多人联机游戏(多人对战)的客户端和服务器端.zip 毕设:基于Java Netty 实现的多人联机游戏(多人对战)...
Java KCP是一个基于Java语言,利用Netty框架实现的可靠UDP网络库,它引入了KCP协议和Forward Error Correction (FEC)技术,为需要高效、低延迟传输的应用提供了强大的解决方案。KCP协议最初由Mars(巫师)设计,其...