![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
netty
Sxm&
java、golang、大数据、云原生
展开
-
Netty-ServerBootstrapAcceptor源码分析
注册一个Acceptor事件处理器到mainReactor中,Acceptor事件处理器所关注的事件是ACCEPT事件,这样mainReactor会监听客户端向服务器端发起的连接请求事件(ACCEPT事件),Acceptor会将客户端的I/O事件分发到sub Reactor线程池,详见Reactor线程模型。那Netty又是如何实现的呢?在来看之前的服务端初始化分析中的init(channe...原创 2020-04-21 08:54:33 · 1315 阅读 · 1 评论 -
Netty-Channel注册源码分析
在完成channel的创建以及初始化之后,接下来进行channel的注册过程。先看下config():config是ServerBootstrap的成员变量实例ServerBootstrapConfig。ServerBootstrap在前面的准备工作完成了一系列的赋值操作。group():进入到了ServerBootstrapConfig的父类AbstractBootstrapCo...原创 2020-01-06 19:37:30 · 552 阅读 · 0 评论 -
Channel与ChannelHandlerContext作用域分析
Channel和ChannelHandlerContext都实现了AttributeMap接口,用户的一个或多个用户定义的属性附加到他们。有时使用户感到困惑的是,一个 Channel和一个 ChannelHandlerContext拥有自己的用户定义属性存储空间。例如,在Channel放置属性“ KEY_X” Channel.attr(KEY_X).set(valueX),通过ChannelHa...原创 2020-01-05 11:14:08 · 4136 阅读 · 0 评论 -
ChannelPipeline源码与高级拦截过滤器模式分析
ChannelPipeline简介ChannelPipeline是处理或拦截一个Channel的入站事件和出站操作的ChannelHandlers的列表。ChannelPipeline实现了拦截过滤器模式的高级形式,让用户完全控制事件的处理方式以及pipeline中的ChannelHandlers之间的交互方式。ChannelPipeline创建每一个channel有它自己的pipeline...原创 2020-01-03 15:47:54 · 260 阅读 · 0 评论 -
Netty服务端初始化过程源码分析
server端启动public class MyServer { public static void main(String[] args) throws Exception{ EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new Nio...原创 2020-01-02 19:40:11 · 272 阅读 · 1 评论 -
自定义协议与TCP粘包拆包解决
tcp粘包与拆包TCP是基于数据流的协议,TCP为提高传输效率,往往要收集到足够多的数据后才发送一个TCP段。TCP底层不了解业务数据的含义,它会根据TCP缓冲区的实际情况进行包的划分,所以业务上认为,一个完整的包可能被TCP拆分为多个包进行发送,也可能把多个小包封装成一个大的数据包进行发送,这就是所谓的TCP粘包和拆包问题。netty实现自定义协议定义了消息格式的类:public cla...原创 2019-12-24 16:44:38 · 486 阅读 · 0 评论 -
ReplayingDecoder源码详解及应用
ReplayingDecoder介绍ReplayingDecoder是ByteToMessageDecoder的一个特殊变体,ReplayingDecoder继承了ByteToMessageDecoder。ReplayingDecoder和ByteToMessageDecoder最大的不同在于,ReplayingDecoder允许让你实现decode()方法,就像已经接收到所有所需的字节,而不用...原创 2019-12-23 14:44:22 · 1640 阅读 · 0 评论 -
Reactor线程模型
经典服务设计在这个设计当中,每一个handler会在其自己的Thread中处理。在经典网络编程中的实现:class Server implements Runnable {public void run() {try {ServerSocket ss = new ServerSocket(PORT);while (!Thread.interrupted())new Thread(n...原创 2019-12-13 17:32:03 · 285 阅读 · 0 评论 -
netty数据容器-ByteBuf
ByteBuf简介ByteBuf提供两个指针变量readerIndex和writerIndex分别地来支持顺序进行读写操作。discardable bytes表示已读过可丢弃的数据,readable bytes表示实际的数据存储内容,writable bytes表示可写入的部分。ByteBuf类型Netty ByteBuf提供三种缓冲区类型:1、heap buffer这是最常用的类型...原创 2019-12-11 16:15:21 · 173 阅读 · 0 评论 -
Netty手写RPC框架
RPC简介RPC,Remote Procedure Call,远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC框架实现要求我们这里要定义一个 RPC 框架,这个框架提供给用户后,用户只需要按照使用步骤就可以完成 RPC 远程调用。我们现在给出用户的使用步骤:1、 用户需要将业务接口通知到 Server 与 Client,因为业务接口是服务名称。...原创 2019-12-30 10:48:04 · 186 阅读 · 0 评论 -
java NIO heap Buffer和direct Buffer
java NIO heap Buffer和direct Bufferheap bufferdirect bufferJava NIO中的direct buffer(主要是DirectByteBuffer),分两部分: java | native | Dire...原创 2019-12-08 10:55:55 · 212 阅读 · 0 评论