![](https://img-blog.csdnimg.cn/direct/f69ba5b4acb3444ba68591ca9c7d857d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
文章平均质量分 87
Netty
geminigoth
大龄程序员,带着14位小朋友做牛马
展开
-
Netty学习——实战篇9 实现dubbo RPC 备份
模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用 Netty 4.X。原创 2024-04-25 15:00:00 · 197 阅读 · 0 评论 -
Netty学习——实战篇9 实现dubbo RPC
模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用 Netty 4.X。原创 2024-04-25 10:00:00 · 545 阅读 · 0 评论 -
Netty学习——实战篇8 Handler链调用、TCP粘包和拆包 备份
/长度//内容@Slf4j@Overridelog.info("MyMessageEncoder 的 encode 方法被调用");/*自定义解码器,把二进制字节码转换成 MessageProtocol对象*/@Slf4j@Overridelog.info("MyMessageDecoder 的 decode方法被调用");//封装成MessageProtocol对象//把 MessageProtocol对象放入list中。原创 2024-04-24 14:30:00 · 933 阅读 · 0 评论 -
Netty学习——实战篇8 Handler链调用、TCP粘包和拆包
/长度//内容@Slf4j@Overridelog.info("MyMessageEncoder 的 encode 方法被调用");/*自定义解码器,把二进制字节码转换成 MessageProtocol对象*/@Slf4j@Overridelog.info("MyMessageDecoder 的 decode方法被调用");//封装成MessageProtocol对象//把 MessageProtocol对象放入list中。原创 2024-04-24 10:00:00 · 1161 阅读 · 0 评论 -
Netty学习——实战篇7 ProtoBuf实战-多类型数据 备份
1、客户端可以随机发送Student POJO 、Worker POJO 对象到服务器(通过protobuf编码)2、服务端能接收 Student POJO 、Worker POJO 对象(需要判断是哪种类型),并显示信息(通过ProtoBuf解码)原创 2024-04-23 14:30:00 · 568 阅读 · 0 评论 -
Netty学习——实战篇7 ProtoBuf实战-多类型数据
1、客户端可以随机发送Student POJO 、Worker POJO 对象到服务器(通过protobuf编码)2、服务端能接收 Student POJO 、Worker POJO 对象(需要判断是哪种类型),并显示信息(通过ProtoBuf解码)原创 2024-04-23 10:00:00 · 544 阅读 · 0 评论 -
Netty学习——实战篇6 ProtoBuf实战-单类型数据 备份
编程程序,使用ProtoBuf完成如下功能1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码)2、服务端能接收Student POJO对象,并显示信息(通过ProtoBuf解码)原创 2024-04-22 15:00:00 · 252 阅读 · 0 评论 -
Netty学习——实战篇6 ProtoBuf实战-单类型数据
编程程序,使用ProtoBuf完成如下功能1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码)2、服务端能接收Student POJO对象,并显示信息(通过ProtoBuf解码)原创 2024-04-22 10:00:00 · 898 阅读 · 0 评论 -
Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程 备份
MyServer.javaMyServerHandler.java NettyChatClient.java NettyChatClientHandler.java服务端运行结果: (1)Http协议是无状态的,浏览器和服务器之间的请求响应一次,下一次会重新创建连接。 (2)实现基于webSocket的长连接的全双工的交互。 (3)改变Http协议多次请求的约束,实现长连接,服务端可以发送消息给浏览原创 2024-04-18 15:00:00 · 463 阅读 · 0 评论 -
Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程
(4)客户端浏览器和服务端会相互感知,比如服务器关闭了,浏览器会感知,同样浏览器关闭了,服务端也会感知。(1)Http协议是无状态的,浏览器和服务器之间的请求响应一次,下一次会重新创建连接。(3)改变Http协议多次请求的约束,实现长连接,服务端可以发送消息给浏览器。自定义Handler:MyTextWebSocketFrameHandler.java。(2)实现基于webSocket的长连接的全双工的交互。服务端代码:MyServer.java。客户端代码:hello.html。原创 2024-04-18 10:00:00 · 799 阅读 · 0 评论 -
Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统 备份
(1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000”(2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。原创 2024-04-17 15:15:00 · 260 阅读 · 0 评论 -
Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统
(1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000”(2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。原创 2024-04-17 10:15:00 · 1063 阅读 · 0 评论 -
Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战 备份
【代码】Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战 备份。原创 2024-04-16 15:15:00 · 242 阅读 · 0 评论 -
Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战
【代码】Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战。原创 2024-04-16 10:00:00 · 250 阅读 · 0 评论 -
Netty学习——实战篇2 NIO 群聊系统(简单版) 备份
log.info("用户,{}",socketChannel.getRemoteAddress(),"已上线");log.info("来自客户端:{}, 的消息是:{}",socketChannel.getRemoteAddress(),msg);log.info("{}",socketChannel.getRemoteAddress(),":已下线");//log.info("用户:{},说:{}",username,message);log.info("{},客户端初始化完成",username);原创 2024-04-15 15:15:00 · 612 阅读 · 0 评论 -
Netty学习——实战篇2 NIO 群聊系统(简单版)
log.info("用户,{}",socketChannel.getRemoteAddress(),"已上线");log.info("来自客户端:{}, 的消息是:{}",socketChannel.getRemoteAddress(),msg);log.info("{}",socketChannel.getRemoteAddress(),":已下线");//log.info("用户:{},说:{}",username,message);log.info("{},客户端初始化完成",username);原创 2024-04-15 10:30:00 · 1189 阅读 · 0 评论 -
Netty学习——实战篇1 BIO、NIO入门demo 备注
运行结果。原创 2024-04-11 15:42:22 · 978 阅读 · 0 评论 -
Netty学习——实战篇1 BIO、NIO入门demo
运行结果。原创 2024-04-11 10:00:00 · 1238 阅读 · 0 评论 -
Netty学习——高级篇2 Netty解码技术 备份
本章继续介绍Netty的其他解码器。原创 2024-04-10 15:00:00 · 968 阅读 · 0 评论 -
Netty学习——高级篇2 Netty解码技术
本章继续介绍Netty的其他解码器。原创 2024-04-10 10:00:00 · 979 阅读 · 0 评论 -
Netty学习——高级篇1 拆包 、粘包与编解码技术 备份
当Server在读取客户端数据的时候,如果一次读取不完整,就会触发channelRead事件,那么Netty是如何处理这类问题的?本节会详细讲解。原创 2024-04-09 15:00:00 · 850 阅读 · 0 评论 -
Netty学习——高级篇1 拆包 、粘包与编解码技术
当Server在读取客户端数据的时候,如果一次读取不完整,就会触发channelRead事件,那么Netty是如何处理这类问题的?本节会详细讲解。原创 2024-04-09 10:00:00 · 1053 阅读 · 0 评论 -
Netty学习——源码篇13 命中缓存的分配 备份
以 tinySubPageDirectCaches[1]为例(下标选择1是因为下标为0代表的规格是0Byte,其实就代表一个空的缓存),在tinySubPageDirectCaches[1]的缓存对象中所缓存的ByteBuf的缓冲区大小是16Byte,在tinySubPageDirectCaches[2]中缓存的ByteBuf的大小为32Byte,以此类推,tinySubPageDirectCaches[31]中缓存的ByteBuf大小事496Byte。具体类型规则的配置如下。现在分析命中缓存的相关逻辑。原创 2024-04-08 15:00:00 · 690 阅读 · 0 评论 -
Netty学习——源码篇13 命中缓存的分配
以 tinySubPageDirectCaches[1]为例(下标选择1是因为下标为0代表的规格是0Byte,其实就代表一个空的缓存),在tinySubPageDirectCaches[1]的缓存对象中所缓存的ByteBuf的缓冲区大小是16Byte,在tinySubPageDirectCaches[2]中缓存的ByteBuf的大小为32Byte,以此类推,tinySubPageDirectCaches[31]中缓存的ByteBuf大小事496Byte。具体类型规则的配置如下。现在分析命中缓存的相关逻辑。原创 2024-04-08 10:00:00 · 1303 阅读 · 0 评论 -
Netty学习——源码篇12 Netty池化内存管理机制 备份
现在来分析池化内存的分配原理。首先找到AbstractByteBufAllocator的子类PooledByteBufAllocator实现分配内存的两个方法:newDirectBuffer和newHeapBuffer方法。观察发现,这两个方法大体结构是一样的,以newDirectBuffer为例,简单分析一下。首先,通过threadCache.get()方法获得一个类型为PoolThreadCache的cache对象,然后,通过cache获得directArena对象;原创 2024-04-07 14:00:00 · 801 阅读 · 0 评论 -
Netty学习——源码篇12 Netty池化内存管理机制
首先调用leastUsedArena()方法分别获得类型为PoolArena的heapArena和directArena对象。那么heapArena和directArena对象是在哪里初始化呢?其实就是创建了一个固定大小的PoolArena数组,数组大小由传入的参数nHeapArena和nDirectArena决定。发现nHeapArena和nDirectArena是通过DEFAULT_NUM_HEAP_ARENA, DEFAULT_NUM_DIRECT_ARENA 这两个常量默认赋值的。原创 2024-04-07 10:30:00 · 1777 阅读 · 0 评论 -
Netty学习——源码篇11 Netty非池化内存分配 备份
现在来看UnpooledByteBufAllocator的内存分配原理。通过调用PlatformDependent.hasUnsafe()方法来判断操作系统是否支持Unsafe,如果支持Unsafe则创建UnpooledUnsafeHeapByteBuf类,否则创建UnpooledHeapByteBuf类。原创 2024-04-03 14:00:00 · 933 阅读 · 0 评论 -
Netty学习——源码篇11 Netty非池化内存分配
现在来看UnpooledByteBufAllocator的内存分配原理。通过调用PlatformDependent.hasUnsafe()方法来判断操作系统是否支持Unsafe,如果支持Unsafe则创建UnpooledUnsafeHeapByteBuf类,否则创建UnpooledHeapByteBuf类。原创 2024-04-03 10:00:00 · 1118 阅读 · 0 评论 -
Netty学习——源码篇10 Netty内存分配ByteBuf基础 备份
ByteBuf是Netty整个结构中最为底层的模块,主要负责把数据从底层I/O读取到ByteBuf,然后传递给应用程序,应用程序处理完成后再把数据封装成ByteBuf写回I/O。所以,ByteBuf是直接与底层打交道的一层抽象。原创 2024-04-02 14:00:00 · 1030 阅读 · 0 评论 -
Netty学习——源码篇10 Netty内存分配ByteBuf基础
ByteBuf是Netty整个结构中最为底层的模块,主要负责把数据从底层I/O读取到ByteBuf,然后传递给应用程序,应用程序处理完成后再把数据封装成ByteBuf写回I/O。所以,ByteBuf是直接与底层打交道的一层抽象。原创 2024-04-02 10:00:00 · 1408 阅读 · 0 评论 -
Netty学习——源码篇9 Netty的Handler其他处理 备份
每个ChannelHandler被添加到ChannelPipeline后,都会创建一个ChannelHandlerContext,并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加到其中的ChannelHandler,因此它是安全的。原创 2024-04-01 14:00:00 · 701 阅读 · 0 评论 -
Netty学习——源码篇9 Handler其他处理与异步处理
每个ChannelHandler被添加到ChannelPipeline后,都会创建一个ChannelHandlerContext,并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加到其中的ChannelHandler,因此它是安全的。原创 2024-04-01 10:00:00 · 1075 阅读 · 0 评论 -
Netty学习——源码篇8 Outbound/Inbound传播方式
可以看到,ChannelOutboundHandlerAdapter的connect方法仅调用了ctx.connect方法,而这个调用又回到了Cotext.connect方法调用Connect.findContextOutbound方法,然后调用next.invokeConect方法,其次调用handler.connect方法,最后又调用Context.connect方法,如此循环下去,直到Connect事件传递到DefaultChannelPipeline的双向链表的头节点,即Head中。原创 2024-03-28 10:00:00 · 789 阅读 · 0 评论 -
Netty学习——源码篇8 Outbound/Inbound传播方式 备份
1、Outbound 事件是请求事件(由Context发起一个请求,并最终由Unsafe处理这个请求)。2、Outbound事件 发起者是Channel。3、Outbound事件的处理者是Unsafe。4、Outbound事件在Pipeline中的传输方向是从Tail到Head。5、在ChannelHandler中处理事件时,如果这个Handler不是最后一个Handler,则需要调用ctx的方法将此事件继续传播下去。如果不这样做,那么此事件的传播会提前终止。原创 2024-03-28 14:30:00 · 711 阅读 · 0 评论 -
Netty学习——源码篇7 Pipeline的事件传播机制1 备份
并且Inbound方法是通过调用相应的ChannelHandlerContext.fireIN_EVT()方法来传递的,而Outbound方法是通过ChannelHandlerContext的fireChannelRegister()调用会发送一个ChannelRegistered的Inbound给下一个ChannelHandlerContext,而ChannelHandlerContext的bind()方法调用时会发送一个bind的Outbound事件给下一个ChannelHandlerContext。原创 2024-03-27 15:00:00 · 625 阅读 · 0 评论 -
Netty学习——源码篇7 Pipeline的事件传播机制1
并且Inbound方法是通过调用相应的ChannelHandlerContext.fireIN_EVT()方法来传递的,而Outbound方法是通过ChannelHandlerContext的fireChannelRegister()调用会发送一个ChannelRegistered的Inbound给下一个ChannelHandlerContext,而ChannelHandlerContext的bind()方法调用时会发送一个bind的Outbound事件给下一个ChannelHandlerContext。原创 2024-03-27 10:30:00 · 1155 阅读 · 0 评论 -
Netty学习——源码篇6 Pipeline设计原理 备份
上面分析了ChannelInitializer是如何插入Pipeline中的,接下来探讨ChannelInitializer在哪里被调用、ChannelInitializer的作用以及自定义的ChannelHandler是如何插入Pipeline中的。@Override再看AbstractChannelHandlerContext的invokeChannelRegister()方法。原创 2024-03-26 15:00:00 · 957 阅读 · 0 评论 -
Netty学习——源码篇6 Pipeline设计原理
在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应,它们的组成关系如下图:通过上图可以看到,一个Channel包含了一个ChannelPipeline,而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表。这个链表的头是HeadContext,链表的尾是TailContext,并且每个ChannelHandlerContext又关联着一个ChannelHandler。原创 2024-03-26 10:30:00 · 1411 阅读 · 0 评论 -
Netty学习——源码篇5 EventLoop 备份
中对Reactor的三种线程模型——单线程模型、多线程模型、主从多线程模型做了介绍,这里具体分析Reactor在Netty中的应用。原创 2024-03-25 14:30:00 · 824 阅读 · 0 评论 -
Netty学习——源码篇5 EventLoop
中对Reactor的三种线程模型——单线程模型、多线程模型、主从多线程模型做了介绍,这里具体分析Reactor在Netty中的应用。原创 2024-03-25 10:00:00 · 1119 阅读 · 0 评论