Netty
文章平均质量分 67
鲜果维他命
Don't be a programmer,to be a problem solver
展开
-
Netty框架之TCP粘包/半包解决方案
Netty框架之TCP粘包/半包解决方案一.TCP粘包二.TCP半包三.TCP粘包/半包解决方案1.FixedLengthFrameDecoder定长解析器2.LineBasedFrameDecoder行解析器3.LengthFieldBasedFrameDecoder谈到TCP粘包/半包的解决方案,我们不妨先认识造成TCP粘包/半包的原因有哪些,以便于更深刻理解解决方案的原理一.TCP粘包1.现象:发送:abc,def,接收:abcdef2.原因:应用层:接受数据的Bytebuf缓冲区设置太大原创 2022-05-03 18:25:26 · 1550 阅读 · 0 评论 -
Netty框架之Pipeline中InboundHandler和OutboundHandler的执行顺序
我们假设现在的Pipeline中的Handler执行器链是这样的:Pipeline->h1->h2->h3->h4->h5->h6->tail假设h1,h2,h3是ChannelInboudHadnler入栈处理器,h4,h5,h6是ChannelOutboundHandler出栈处理器那么Handler的执行顺序是h1->h2->h3->h6->h5->h4,先执行InboundHandler,再反从tail往前找执行Outbo原创 2022-05-01 17:49:43 · 809 阅读 · 0 评论 -
Netty框架之ChannelFuture和CloseFuture异步处理连接和断开
一.ChannelFuture异步处理连接请求1.说到异步处理,先从同步阻塞处理连接请求讲起public static void main(String[] args) { //bootstrap客户端启动器,启动客户端,绑定各个组件 Bootstrap bootstrap = new Bootstrap(); //设置NioEventLoopGroup作为Woker线程组处理IO读写请求,这里因为客户端不需要处理连接请求,所以不需要NioEventLoo原创 2022-05-01 12:19:26 · 2733 阅读 · 0 评论 -
Netty框架之Netty组件及其作用
Netty框架之Netty组件及其作用1.ServerBootStrap2.group(new NioEventLoopGroup())3.channel()4.ChildHandler和Handler5.ChannelPipeline说到Netty组件的作用,不得不从Netty的客户端或服务端创建流程分析,请看下面服务端的代码public static void main(String[] args) { //serverBootstrap,就是服务端启动器,启动服务端原创 2022-05-01 11:36:15 · 313 阅读 · 0 评论 -
Netty框架之网络通信入门程序~helloWorld
案例演示:创建客户端和服务端,实现客户端与服务端建立连接,并且发送消息给服务端Netty框架之网络通信入门程序~helloWorld1.服务端代码实现2.客户端代码实现请尝试阅读代码,并理解注释的含义1.服务端代码实现public class Server { public static void main(String[] args) { //serverBootstrap,就是服务端启动器,启动服务端,并且绑定组件 ServerBootstrap serv原创 2022-04-27 17:23:00 · 193 阅读 · 0 评论 -
Netty框架之多线程的Selector优化
Netty框架之多线程的Selector优化1.一个Boss线程,一个Woker线程实现服务器2.一个Boss线程,多个Woker线程实现服务器学习Selector之后,我们发现单个Selector轮询器在一个线程中既要处理连接事件(OP_ACCPET),又要处理IO读写事件(OP_READ,OP_WRITE),效率是很低的,所以利用多线程创建多个Selector分别负责连接事件,IO读写事件,充分利用电脑的CPU资源.那么这里我们就分类两个线程:1.Boss线程:专门负责OP_ACCPET事件,也就原创 2022-04-26 17:12:09 · 604 阅读 · 0 评论 -
Netty框架之Selector使用详解
谈到Selector的具体使用,那么就要结合BIO,NIO的知识讲解,Selector使用在非阻塞模式NIO场景下,学习NIO之前先要了解BIO原理,下面我们一步步讲解一.BIO(Blocking-IO)-阻塞IO模式先来看一下BIO下服务端的代码public static void main(String[] args) throws Exception { //创建服务端通道 ServerSocketChannel ssc = ServerSocketChannel原创 2022-04-25 15:16:34 · 1506 阅读 · 1 评论 -
ByteBuffer的原理和使用详解
ByteBuffer的原理和使用详解1.ByteBuffer的2种创建方式2.字符串转成ByteBuffer的3三种方式3.Bytebuffer的读写底层原理ByteBuffer是字节缓冲区,主要用户读取和缓存字节数据,多用于网络编程,Netty框架的重要知识点1.ByteBuffer的2种创建方式1.ByteBuffer buf = ByteBuffer.allocate(int size);方式1的buf缓冲区存储在堆内存中,内存开销在JVM中,受GC影响,会多拷贝一次,因为java程序收到的数原创 2022-04-24 17:02:37 · 2363 阅读 · 1 评论 -
Netty框架之Selector轮询器
Selector的原理详解1.传统多线程网络通信的服务器设计2.线程池版网络通信的服务器设计Selector版网络通信的服务器设计说到Selector的作用,我们不得不引入多线程网络通信的设计1.传统多线程网络通信的服务器设计服务器每建立一个客户端连接Socket,就会创建一个线程单独处理这个Socket中的IO请求(IO读写),那么这样当连接很多的时候,势必会造成线程资源不足的问题,浪费内存空间,且处理不同连接的IO请求时会频繁的切换线程,降低CPU的利用率缺点:1.浪费线程资源,消耗内存空间原创 2022-04-24 12:29:29 · 2053 阅读 · 0 评论