Netty
文章平均质量分 74
shangshanzixu
这个作者很懒,什么都没留下…
展开
-
使用Netty实现Dubbo RPC
emmmm不想一点一点介绍这个代码了,注释写的挺清楚的,主要思路就是Consumer通过反射获取对应的服务接口实例时,使用的代理模式。调用代理对象时的方法时,实际上是通过Netty的channel将对应的方法调用信息传给Provider直接wait()阻塞,然后通过synchronized+wait()+notify()实现线程通信,当Provider接收到客户端得请求时,根据请求数据去服务容器中寻找对应的服务进行调用处理(这里简单得通过一个Map模拟了服务容器,然后通过反射调用Method得invoke方原创 2021-02-23 21:51:38 · 115 阅读 · 0 评论 -
Netty源码篇(二) 接收客户端请求源码分析
上一篇源码分析中,我们完成了对服务器启动的源码分析。不知道小伙伴们还记不记得最终我们的服务器启动之后进入到了哪里? 直接揭晓答案了:进入到了NioEventLoop类中的run方法,里面有一个死循环,一直做着三件事情:select()、processSelectedKeys()、runAllTasks()。 现在我们启动客户端给服务器发送消息,看看服务器会做哪些处理。因为我们的Netty是基于主从Reactor多线程的模型改进而来,我们就将本文分为bossGroup部分和workerGroup部分来叙述,我原创 2021-02-23 15:44:31 · 135 阅读 · 0 评论 -
Netty源码篇(一) 服务器启动源码分析
目录1.创建EventLoopGroup1.1 关于线程数的设置1.2 构造方法主体内容2.创建ServerBootstrap3.服务器启动3.1 initAndRegister() Netty是什么就不过多介绍了,源码分析的代码来自于netty源码包下的案例。 今天分析的代码就是上面这一段,现在我们就开始分析服务端启动的源码流程。(在看源码之前希望大家能够了解Nio、三种Reactor模型等前置知识,这些可以帮助你进行源码理解。源码这个东西自己看的越多就越容易理解,大家坚持下去就一定能掌握) 1.创建原创 2021-02-22 23:54:15 · 243 阅读 · 0 评论 -
Netty之自定义协议+编解码解决Tcp粘包拆包问题
什么是Tcp粘包和拆包问题? 因为Tcp是面向连接的,面向流的,提供高可靠的连接服务,因此发送端为了将多个发送给接收端的包更加有效的发送给对方,就会使用一种优化算法(Nagle),将多次间隔较小的小数据包合并成一个大的数据块,然后进行封装。这样做虽然提高了效率,但是接收端就无法分辨出到底有多少个数据包。(面向流的)通信是无消息保护边界的。 所以发送端发送的多个包可能被接收端当作一个包接收,这就是粘包问题。同时也可能一个包被拆开到多个包中,这就是拆包问题。 如何解决? 自定义协议+编解码 如果通信的双方都知原创 2021-02-21 22:24:00 · 646 阅读 · 0 评论 -
Google Protocol Buffer
目录1.protobuf是什么?2.使用protobuf传输指定类型2.1编写*.proto文件2.2使用protoc.exe解析出对应的Java源文件3.使用protobuf传输多种类型3.1 编写*.proto文件3.2解析出对应的Java源程序4.上述两种的测试代码 1.protobuf是什么? protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率原创 2021-02-20 21:24:48 · 181 阅读 · 0 评论 -
BIO、NIO与netty的架构关系
目录1.BIO2.NIO3.Netty3.1 传统阻塞式IO模型3.2 Reator模型3.2.1单reactor单线程模型3.2.2单reactor多线程模型3.2.3主从reactor多线程模型3.3 netty架构模型3.4 Netty的执行流程 1.BIO BIO的基本特点:BIO基本特点就是服务器在接收到客户端请求之前(accept方法)会进行阻塞,并且每接收到一个连接,都会新建一个线程去处理客户端的请求,并且读取客户端数据的过程是阻塞式的,如果没有读到对应的数据会一直等待。并且客户端数据发送完毕原创 2021-02-19 20:41:26 · 349 阅读 · 0 评论