- 博客(163)
- 收藏
- 关注
原创 Netty学习——实战篇9 实现dubbo RPC 备份
模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用 Netty 4.X。
2024-04-25 15:00:00 121
原创 Netty学习——实战篇9 实现dubbo RPC
模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用 Netty 4.X。
2024-04-25 10:00:00 441
原创 Netty学习——实战篇8 Handler链调用、TCP粘包和拆包 备份
/长度//内容@[email protected]("MyMessageEncoder 的 encode 方法被调用");/*自定义解码器,把二进制字节码转换成 MessageProtocol对象*/@[email protected]("MyMessageDecoder 的 decode方法被调用");//封装成MessageProtocol对象//把 MessageProtocol对象放入list中。
2024-04-24 14:30:00 781
原创 Netty学习——实战篇8 Handler链调用、TCP粘包和拆包
/长度//内容@[email protected]("MyMessageEncoder 的 encode 方法被调用");/*自定义解码器,把二进制字节码转换成 MessageProtocol对象*/@[email protected]("MyMessageDecoder 的 decode方法被调用");//封装成MessageProtocol对象//把 MessageProtocol对象放入list中。
2024-04-24 10:00:00 1116
原创 Netty学习——实战篇7 ProtoBuf实战-多类型数据 备份
1、客户端可以随机发送Student POJO 、Worker POJO 对象到服务器(通过protobuf编码)2、服务端能接收 Student POJO 、Worker POJO 对象(需要判断是哪种类型),并显示信息(通过ProtoBuf解码)
2024-04-23 14:30:00 533
原创 Netty学习——实战篇7 ProtoBuf实战-多类型数据
1、客户端可以随机发送Student POJO 、Worker POJO 对象到服务器(通过protobuf编码)2、服务端能接收 Student POJO 、Worker POJO 对象(需要判断是哪种类型),并显示信息(通过ProtoBuf解码)
2024-04-23 10:00:00 491
原创 Netty学习——实战篇6 ProtoBuf实战-单类型数据 备份
编程程序,使用ProtoBuf完成如下功能1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码)2、服务端能接收Student POJO对象,并显示信息(通过ProtoBuf解码)
2024-04-22 15:00:00 225
原创 Netty学习——实战篇6 ProtoBuf实战-单类型数据
编程程序,使用ProtoBuf完成如下功能1、客户端发送一个Student POJO对象到服务器(通过ProtoBuf编码)2、服务端能接收Student POJO对象,并显示信息(通过ProtoBuf解码)
2024-04-22 10:00:00 861
原创 Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程 备份
MyServer.javaMyServerHandler.java NettyChatClient.java NettyChatClientHandler.java服务端运行结果: (1)Http协议是无状态的,浏览器和服务器之间的请求响应一次,下一次会重新创建连接。 (2)实现基于webSocket的长连接的全双工的交互。 (3)改变Http协议多次请求的约束,实现长连接,服务端可以发送消息给浏览
2024-04-18 15:00:00 332
原创 Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程
(4)客户端浏览器和服务端会相互感知,比如服务器关闭了,浏览器会感知,同样浏览器关闭了,服务端也会感知。(1)Http协议是无状态的,浏览器和服务器之间的请求响应一次,下一次会重新创建连接。(3)改变Http协议多次请求的约束,实现长连接,服务端可以发送消息给浏览器。自定义Handler:MyTextWebSocketFrameHandler.java。(2)实现基于webSocket的长连接的全双工的交互。服务端代码:MyServer.java。客户端代码:hello.html。
2024-04-18 10:00:00 683
原创 Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统 备份
(1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000”(2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。
2024-04-17 15:15:00 234
原创 Netty学习——实战篇4 Netty开发Http服务实战、ByteBuf使用、开发群聊系统
(1)Netty服务器监听8000端口,浏览器发出请求“http://localhost:8000”(2)服务器可以回复消息给客户端,“你好,我是服务器”,并对特定请求资源进行过滤。
2024-04-17 10:15:00 987
原创 Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战 备份
【代码】Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战 备份。
2024-04-16 15:15:00 227
原创 Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战
【代码】Netty学习——实战篇3 BIO与NIO零拷贝 和 Netty入门实战。
2024-04-16 10:00:00 225
原创 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 585
原创 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 1173
原创 Netty学习——高级篇1 拆包 、粘包与编解码技术 备份
当Server在读取客户端数据的时候,如果一次读取不完整,就会触发channelRead事件,那么Netty是如何处理这类问题的?本节会详细讲解。
2024-04-09 15:00:00 820
原创 Netty学习——高级篇1 拆包 、粘包与编解码技术
当Server在读取客户端数据的时候,如果一次读取不完整,就会触发channelRead事件,那么Netty是如何处理这类问题的?本节会详细讲解。
2024-04-09 10:00:00 978
原创 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 679
原创 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 1292
原创 Netty学习——源码篇12 Netty池化内存管理机制 备份
现在来分析池化内存的分配原理。首先找到AbstractByteBufAllocator的子类PooledByteBufAllocator实现分配内存的两个方法:newDirectBuffer和newHeapBuffer方法。观察发现,这两个方法大体结构是一样的,以newDirectBuffer为例,简单分析一下。首先,通过threadCache.get()方法获得一个类型为PoolThreadCache的cache对象,然后,通过cache获得directArena对象;
2024-04-07 14:00:00 787
原创 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 1671
原创 Netty学习——源码篇11 Netty非池化内存分配 备份
现在来看UnpooledByteBufAllocator的内存分配原理。通过调用PlatformDependent.hasUnsafe()方法来判断操作系统是否支持Unsafe,如果支持Unsafe则创建UnpooledUnsafeHeapByteBuf类,否则创建UnpooledHeapByteBuf类。
2024-04-03 14:00:00 906
原创 Netty学习——源码篇11 Netty非池化内存分配
现在来看UnpooledByteBufAllocator的内存分配原理。通过调用PlatformDependent.hasUnsafe()方法来判断操作系统是否支持Unsafe,如果支持Unsafe则创建UnpooledUnsafeHeapByteBuf类,否则创建UnpooledHeapByteBuf类。
2024-04-03 10:00:00 1093
原创 Netty学习——源码篇10 Netty内存分配ByteBuf基础 备份
ByteBuf是Netty整个结构中最为底层的模块,主要负责把数据从底层I/O读取到ByteBuf,然后传递给应用程序,应用程序处理完成后再把数据封装成ByteBuf写回I/O。所以,ByteBuf是直接与底层打交道的一层抽象。
2024-04-02 14:00:00 997
原创 Netty学习——源码篇10 Netty内存分配ByteBuf基础
ByteBuf是Netty整个结构中最为底层的模块,主要负责把数据从底层I/O读取到ByteBuf,然后传递给应用程序,应用程序处理完成后再把数据封装成ByteBuf写回I/O。所以,ByteBuf是直接与底层打交道的一层抽象。
2024-04-02 10:00:00 1357
原创 Netty学习——源码篇9 Netty的Handler其他处理 备份
每个ChannelHandler被添加到ChannelPipeline后,都会创建一个ChannelHandlerContext,并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加到其中的ChannelHandler,因此它是安全的。
2024-04-01 14:00:00 685
原创 Netty学习——源码篇9 Handler其他处理与异步处理
每个ChannelHandler被添加到ChannelPipeline后,都会创建一个ChannelHandlerContext,并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加到其中的ChannelHandler,因此它是安全的。
2024-04-01 10:00:00 979
原创 Oracle基础-PL/SQL编程 备份
数据类型本质上是一种用于描述数据存储的内存结构,用它来决定变量中所存储数据的类型,而变量本质上是一种用名称进行识别的标示符号,它可以存储不同类型的数据。根据不同的数据类型,定义不同名称的变量,这样就可以存储不同类型的数据。变量在程序运行的过程中,其值可以发生变化,与变量对应的就是常量,常量是指在程序运行的过程中,值不会发生变化。变量是指其值在程序运行过程中可以改变的数据存储结构,定义变量必须的元素就是变量名和数据类型,另外还有可选择的初始值,格式如下:[(长度) := ]
2024-03-30 09:01:48 906
原创 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 664
原创 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 747
原创 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 613
原创 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 1130
原创 Netty学习——源码篇6 Pipeline设计原理 备份
上面分析了ChannelInitializer是如何插入Pipeline中的,接下来探讨ChannelInitializer在哪里被调用、ChannelInitializer的作用以及自定义的ChannelHandler是如何插入Pipeline中的。@Override再看AbstractChannelHandlerContext的invokeChannelRegister()方法。
2024-03-26 15:00:00 926
原创 Netty学习——源码篇6 Pipeline设计原理
在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应,它们的组成关系如下图:通过上图可以看到,一个Channel包含了一个ChannelPipeline,而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表。这个链表的头是HeadContext,链表的尾是TailContext,并且每个ChannelHandlerContext又关联着一个ChannelHandler。
2024-03-26 10:30:00 1351
原创 Netty学习——源码篇5 EventLoop 备份
中对Reactor的三种线程模型——单线程模型、多线程模型、主从多线程模型做了介绍,这里具体分析Reactor在Netty中的应用。
2024-03-25 14:30:00 807
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人