NIO 基础
NIO 基础non-blocking io 非阻塞 IO 1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层 123graph LRchannel --> bufferbuffer --> channel 常见的 Channel 有 FileChannel DatagramChannel SocketChannel ServerSocketChannel buffer 则用来缓冲读写数据,常见的 buffer 有 ByteBuffer MappedByteBuffer DirectByteBuffer HeapByteBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer CharBuffer 1.2...
Netty 入门
Netty 入门1. 概述1.1 Netty 是什么?12Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients. Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 1.2 Netty 的作者 他还是另一个著名网络应用框架 Mina 的重要贡献者 1.3 Netty 的地位Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位 以下的框架都使用了 Netty,因为它们有网络通信需求! Cassandra - nosql 数据库 Spark - 大数据分布式计算框架 Hadoop - 大数据分布式存储框架 RocketMQ - ali 开源的消息队列 ElasticSearch - 搜索引擎 gRPC - rpc 框架 Dubbo...
Netty 进阶
Netty 进阶1. 粘包与半包1.1 粘包现象服务端代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546public class HelloWorldServer { static final Logger log = LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss = new NioEventLoopGroup(1); NioEventLoopGroup worker = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); ...
优化与源码
优化与源码1. 优化1.1 扩展序列化算法序列化,反序列化主要用在消息正文的转换上 序列化时,需要将 Java 对象变为要传输的数据(可以是 byte[],或 json 等,最终都需要变成 byte[]) 反序列化时,需要将传入的正文数据还原成 Java 对象,便于处理 目前的代码仅支持 Java 自带的序列化,反序列化机制,核心代码如下 1234567891011// 反序列化byte[] body = new byte[bodyLength];byteByf.readBytes(body);ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(body));Message message = (Message) in.readObject();message.setSequenceId(sequenceId);// 序列化ByteArrayOutputStream out = new ByteArrayOutputStream();new...
netty与reactor
转自思否用户@郭艺宾 Reactor模式 Reactor是1995年由道格拉斯提出的一种高性能网络编程模式。由于好多年了,当时的一些概念与现在略有不同,reactor模式在网络编程中是非常重要的,可以说是NIO框架的典型模式,一些经典的框架,比如Mina、Netty、Cindy都是此模式的实现。 我们来看看当年提出的通用模型: 上面的图形中: 1、Handle 可以理解为资源或者文件句柄,放在netty里面就是channel,就是我们实际要处理的东西 2、Event Handler和Concrete Event Handler 就是具体的事件处理器,对应netty中的handler接口和具体的handler 3、Synchronous Event Demultiplexer同步事件多路复用分发器,可以理解为nio中的select 4、Initiation...
netty介绍及入门案例
netty Netty是一个高性能的网络编程框架。Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。 优点 在设计方面来说: 1)统一的API,适用于不同的协议(阻塞和非阻塞) 2)基于灵活、可扩展的事件驱动模型(SEDA) 3)高度可定制的线程模型 4)可靠的无连接数据Socket支持(UDP) 在性能方面: 1)更好的吞吐量,低延迟 2)更省资源 3)尽量减少不必要的内存拷贝(这也是快的原因之一) 安全方面: 完整的SSL/TLS和STARTTLS的支持 在易用性方面: 1)完善的Java doc,用户指南和样例(个人觉得并不是很完善,国内的书籍也只有一两本还可以) 2)仅依赖于JDK1.6(netty 4.x) netty的主要组件包括: TransportChannel —-对应NIO中的channel EventLoop—- 对应于NIO中的while循环 EventLoopGroup:...
netty组件介绍(1)
ChannelHandler和ChannelPipeline---对应于NIO中的客户逻辑实现handleRead/handleWrite(interceptor pattern)ByteBuf---- 对应于NIO 中的ByteBuffer业务逻辑要放在handler里面,读写数据用的是ByteBuf。其余的Transport、ServerBootstrap、Channel和EventLoop等等都是套路代码,对于应用程序来说,了解即可,基本上不用管。真正开发过netty项目也知道,项目中大部分都是handler类,其它组件只是占很少一部分。 Transport组件 netty做的比较有适应性的就是,不仅支持NIO,还支持很多传输协议: OIO -阻塞IO(真正开发阻塞IO项目,其实也没必要用netty了。。。) NIO -Java NIO Epoll - Linux Epoll(JNI) Local Transport - IntraVM调用(通讯的双方在同一个虚拟机之内不再走socket) Embedded Transport -...
netty组件介绍(2)-channel组件
ChannelHandler组件介绍ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler。Netty提供2个重要的 ChannelHandler 子接口,用来自定义ChannelHandler: ChannelInboundHandler - 处理进站数据和所有状态更改事件(进站指的是读操作等由通道引发的事件) ChannelOutboundHandler -...
