![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
netty
netty
小阳同学^_^
是行动让潜能无限
展开
-
13、JSON和ProtoBuf序列化
序列化/反序列化框架JSON :可读性强,字符串,性能差。对于性能要求不是太高的服务器程序,用JSON较好ProtoBuf:二进制框架,性能强。netty和微信都在用此框架详解粘包和拆包(传输中会有半包问题)netty发送数据和读取数据的场所是ByteBuf缓冲区存在的问题:读到多个客户端的ByteBuf的输入,但是“粘”在了一起读到部分ByteBuf的内容,并且有乱码...原创 2020-04-27 23:39:46 · 829 阅读 · 0 评论 -
12、Decoder解码器和Encoder编码器
decoder部分:decoder解码器是将Byte解析成为List的Java pojo对象。所有netty中的解码器,都是Inbound入站处理器类型,都直接或者间接实现了ChannelInboundHandler接口。每个解码器都是一个InboundHanderdecoder–>ByteToMessageDecoder解码器该类是个抽象类,不可直接使用它会将上一站传过来的By...原创 2020-04-25 18:01:42 · 3942 阅读 · 1 评论 -
11、Netty的ByteBuf缓冲区
优化点netty重写了Java的ByteBuff,具体有哪些优点pooling池化,减少了内存的复制和GC。提升了效率复合缓冲区,支持0复制不需要调用flip()的方法切换读写。可以自定义缓冲区类型(Heap Buff 和direct buff)。可以进行引用计数。来标记是否可GCByteBuf的逻辑部分分为4个部分已用字节:表示已经使用完的无用的字节可读字节:这部分是B...原创 2020-04-23 23:56:10 · 564 阅读 · 0 评论 -
10、netty中的channel、channelPipeline、channelHandler、channelHandlerContext
关系channel —通道,一个channel中有1个channelPipelinechannelPipeline—一个channelPipeline中有很多个channelHandler节点,责任链模式channelHandler—具体的处理IO事件的处理器channelHandlerContext—channelPipeline就是通过channelHandlerContext来管理c...原创 2020-04-19 22:40:25 · 227 阅读 · 0 评论 -
9、异步回调模式
joinjoin的时候,程序是阻塞的。并且没有返回值。/** * join相当于调用了wait方法,等子线程执行完成后,才会启用notifyAll来唤醒其他线程 * * * * */public class JoinTest { static class HotWater implements Runnable{ public void run() {...原创 2020-04-13 23:50:18 · 122 阅读 · 0 评论 -
8、反应器模式Reactor(多线程主从模型)
多线程主从模型角色多线程主从模型主要的应用场景,就是netty1、MainReactor 主反应器角色。该角色只处理OP_ACCEPT 的IO事件,只轮循主Selector。并将事件分发出去,由Acceptor角色执行2、Acceptor接受者。Acceptor将分发过来的事件,创建SocketChannel,并将OP_WRITE事件注册到多个SubSelector中。3、SubReact...原创 2020-04-13 23:16:51 · 353 阅读 · 0 评论 -
7、反应器模式Reactor(单线程版)
反应器模式角色单线程的反应器模式,主要用在redis4.0以前,1、Reactor 反应器角色。该角色主要是来监听Selector中感兴趣的IO事件的。找出所有事件,并将事件分发出去2、Acceptor 接受者。该角色主要接收Reactor反应器中分发的 OP_ACCEPT接收事件,并创建SocketChannel通道,将处理类设置到选择键的附件中3、Handler 处理角色。Server...原创 2020-04-13 22:52:16 · 154 阅读 · 0 评论 -
6、BIO
模拟BIO代码public class SocketServer { public static void main(String[] args) throws Exception { while (true){ //创建一个服务端的socket ServerSocket serverSocket=new ServerS...原创 2020-04-11 19:31:44 · 84 阅读 · 0 评论 -
5、Selector(选择器)
Selector是干什么的选择是是NIO的三大组件之一。是IO多路复用的关键。Selector是管理通道的。通道注册到Selector中,可以通过1个线程,管理上万个Socket连接。通道的注册条件:通道必须是继承SelectableChannel(可选择通道)抽象类的。并且是非阻塞的。FileChannel不能注册到选择器中,因为FileChannel没有继承抽象类,并且是阻塞的。S...原创 2020-04-07 23:48:00 · 563 阅读 · 0 评论 -
4、Channel(通道)
交互通道是和缓冲区交互的新建的缓冲区默认的模式是写入,所以会从通道中读数据。缓冲区经过flip()翻转后,变成读模式。才会向通道中写数据。通道类型1、FileChannel 文件通道,阻塞的2、ScoketChannel,ServerScoketChannel 套接字通道,是基于TCP协议传输的3、DatagramChannel 数据报通道。是基于UDP协议传输的。...原创 2020-04-07 22:57:55 · 23941 阅读 · 0 评论 -
3、Buffer类
简介Buffer类线程不安全。抽象类,是Java.nio包下的基类在NIO中有8种缓冲区分类,子类主要有8个:ByteBuffer,CharBuffer,IntBuffer,DoubleBuffer,FloatBuffer,LongBuffer,ShortBuffer,MappedByteBuffer前7个包含了Java的8大基本类型。使用最多的是ByteBufferBuffer类的属性...原创 2020-04-06 23:11:13 · 292 阅读 · 0 评论 -
2、Java NIO(IO多路复用)
Java NIO 和OIO区别OIO:old IO,是面向流的。一个用户线程的read操作,是阻塞的NIO:是用的IO模型中的 IO多路复用1、NIO 是面向缓冲区的。2、NIO 有3个核心组件:通道(channel)、缓冲区(Buffer)、选择器(Selector)3、NIO的实现是基于低层选择器的调用(选择器在用户空间),调用Linux内核的epoll框架,epoll框架会将就绪的...原创 2020-04-06 22:40:10 · 1321 阅读 · 0 评论 -
1、四种主要的IO模型
IO分为同步IO和异步IO 两大类。同步:是一种用户空间与内核空间的IO发起方式,同步IO是指用户线程主动发起的一方,内核空间是被动接收方异步:异步IO是内核线程主动发起的一方,用户空间为被动接受方。Java中的NIO 是NEW IO 而不是none-blocking IO,JAVA中用的是 多路复用IOLINUX默认的线程数是1024个同步阻塞IO1、用户线程发起访问(进入阻塞状态)...原创 2020-04-06 19:33:01 · 286 阅读 · 0 评论