
Netty
文章平均质量分 72
Netty
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
Netty实现一个简易RPC框架
RPC(Remote Procedure Call) —— 远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。//加 int add(int a , int b);//减 int sub(int a , int b);//乘 int mult(int a , int b);//除 int div(int a , int b);} }//类名 private String methodName;原创 2023-06-05 08:56:56 · 219 阅读 · 0 评论 -
Netty核心源码分析(五)核心组件EventLoop源码分析
当第一次添加时就启动线程,执行 run 方法,而 run 方法是整个 EventLoop 的核心,就像 EventLoop 的名字一样,Loop Loop ,不停的 Loop ,Loop 做什么呢?大致的逻辑就是:调用NIO的selector的select方法,默认阻塞一秒钟,如果有定时任务,则在定时任务剩余时间的基础上再加上0.5秒进行阻塞。(4)EventLoop是一个单例的线程池,里面含有一个死循环的线程不断地做着三件事情:监听端口、处理端口事件、处理队列事件。(1)select获取感兴趣的事件。原创 2023-04-25 14:40:39 · 661 阅读 · 1 评论 -
Netty核心源码分析(四)心跳检测源码分析
IdleStateHandler 可以实现心跳功能,当服务器和客户端没有任何读写交互时,并超过了给定的时间,则会触发用户 handler 的 userEventIriggered 方法。用户可以在这个方法中尝试向对方发送信息,如果发送失败,则关闭连接。IdleStateHandler 的实现基于 EventLoop 的定时任务,每次读写都会记录一个值,在定时任务运行的时候通过计算当前时间和设置时间和上次事件发生时间的结果,来判断是否空闲。内部有 3 个定时任务,分别对应读事件,写事件,读写事件。原创 2023-04-25 13:33:42 · 591 阅读 · 0 评论 -
Netty核心源码分析(三)业务请求执行关键——ChannelPipeline、ChannelHandler、ChannelHandlerContext源码分析
到这里,针对三个对象创建过程就结束了,每当创建 ChannelSocket 的时候都会创建个绑定的 pipeline,一对一的关系,创建 pipeline 的时候也会创建 tail 节点和 head 节点,形成最初的链表。tail是入站 inbound 类型的 handler, head 既是 inbound 也是 outbound 类型的 handler。原创 2023-04-24 17:59:50 · 438 阅读 · 0 评论 -
Netty核心源码分析(二),Netty的Server端接收请求过程源码分析
而ServerBootstrapAcceptor是pipeline的最后一个Handler,它的channelRead方法是在ServerBootStrap父类中实现的,我们继续看ServerBootstrapAcceptor的channelRead方法。总体流程:接受连接---->创建一个新的 NioSocketChannel---------->注册到一个 worker EventLoop-------->注册 selecot Read 事件。4)注册成功后,开始监听Read事件。原创 2023-04-23 17:01:37 · 645 阅读 · 0 评论 -
Netty核心源码分析(一),Netty的Server端启动过程源码分析
(2) 创建了一个唯一的 ChannelId,创建了一个 NioMessageUnsafe,用于操作消息,创建了个 DefaultChannelPipeline 管道,是个双向链表结构,用于过滤所有的进出的消息。我们可以看到,addLast方法并不是将Handler放到了最后,而是将我们自定义的Handler放到了tail的前一个,这样tail永远会在最后面,做一些系统的固定工作。最终是获取了CPU核心数 * 2,并创建这些线程,我本机CPU是20核,所以创建了40个workerGroup线程。原创 2023-04-23 14:07:56 · 860 阅读 · 0 评论 -
Netty编解码器,Netty自定义编解码器解决粘包拆包问题,Netty编解码器的执行过程详解
当Netty发送或者接收一个消息的时候,就会发生一次数据转换。入站消息会被解码(从字节转换为另一种格式,比如java对象);出站消息会被编码成字节。Netty 提供一系列实用的编解码器,他们都实现了 ChannelInboundHadnler 或者 ChannelOutboundHandler 接口。在这些类中,channelRead 方法已经被重写了。以入站为例,对于每个从入站 Channel 读取的消息,这个方法会被调用。原创 2023-04-22 21:30:19 · 1070 阅读 · 0 评论 -
Netty解决粘包拆包问题,Netty使用自定义编解码器解决粘包拆包问题
TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端) 都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的。优于TCP无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题。原创 2023-04-22 21:29:35 · 988 阅读 · 0 评论 -
Netty使用Google Protobuf进行编解码
编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据0时就需要解码。通常来说,codec(编解码器)的组成部分有两个: decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节2)码数据,decoder 负责把字节码数据转换成业务数据。Protobuf 是 Google 发布的开源项目,全称 Google Protocol Buffers,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。原创 2023-04-20 18:04:15 · 876 阅读 · 0 评论 -
Netty入门案例——Netty实现websocket
【代码】Netty入门案例——Netty实现websocket。原创 2023-04-20 15:10:01 · 492 阅读 · 0 评论 -
Netty入门案例——Netty实现心跳检测
【代码】Netty入门案例——Netty实现心跳检测。原创 2023-04-20 14:39:52 · 522 阅读 · 0 评论 -
Netty入门案例——Netty实现简单群聊系统
可以考虑加入数据库,实现点对点通信、用户注册、离线消息等功能。原创 2023-04-20 11:50:30 · 295 阅读 · 0 评论 -
Netty核心模块、核心组件理解
Netty 中所有的 IO 操作都是异步的,不能立刻得知消息是否被正确处理。ByteBuf是netty的Server与Client之间通信的数据传输载体(Netty的数据容器),它提供了一个byte数组(byte[])的抽象视图,既解决了JDK API的局限性,又为网络应用程序的开发者提供了更好的API。入站事件和出站事件在一个双向链表中,入站事件会从链表head往后传递到最后一个入站的 handler,出站事件会从链表tail往前传递到最前一个出站的handler,两种类型的handler互不干扰。原创 2023-04-20 09:45:52 · 447 阅读 · 0 评论 -
Netty工作模型——网络IO模型的演进,从BIO到NIO到Reactor模型与Netty工作模型
AIO 即 NIO2.0,叫做异步不阻塞的 IO。AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。Java 的NIO 就是 Reactor,当有事件触发时,服务器端得到通知,进行相应的处理。AIO目前并不是主流的IO模型,linux目前并不支持AIO的异步非阻塞模式,即使是epoll也是在NIO的基础上进行的优化,所以当前主流的IO模型还是NIO模型。原创 2023-04-19 11:51:46 · 350 阅读 · 0 评论 -
使用netty实现一个http挡板,轻量又实用。收藏起来吧
目录一、需要的包二、代码三、导出jar包四、启动jar包五、使用一、需要的包二、代码package com.cxf.http;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;imp..原创 2021-11-29 09:37:01 · 1038 阅读 · 0 评论 -
netty4搭建简单的http服务器
话不多说上代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socke...原创 2021-02-24 15:16:10 · 1976 阅读 · 0 评论 -
Netty4服务端和客户端实现
目录目标代码UML类图服务端客户端Netty4实现服务端Netty4实现客户端测试小结目标用netty4实现一个服务端和客户端,两者之间可以进行测试通信代码UML类图服务端客户端Netty4实现服务端服务类package com.mym.netty.server;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty转载 2021-02-24 15:09:38 · 2041 阅读 · 0 评论 -
Netty解决粘包和拆包问题的四种方案
目录1. 粘包和拆包2. 常见解决方案3. Netty提供的粘包拆包解决方案4. 小结在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie ma q转载 2021-02-24 14:50:47 · 2264 阅读 · 0 评论