自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 rocketMQ之Name Server

1. rocketMQ总体结构图2. Name Server的功能3. 与协调的角色交互3.2为何不是zookeeper4. 通信机制5. 源码解析

2020-11-05 17:14:41 1751

原创 空闲与心跳

netty作为应用框架,为什么需要做心跳呢?我们可以想象这样一个场景,服务器在某个时段连接了很多客户端,数量超过了服务器的带宽负载,就会导致一些客户端,特别是网络很差的客户端在底层的tcp连接中其实已经跟服务器断开了,但是服务器跟这些客户端的tcp的4次挥手迟迟没有完成,导致服务器认为这些客户端其实还活着,这种现象叫做链接的假死。如下图对于netty来讲,一条链接对应着一个channel,一个channel中可能会创建很多handler,会占用服务器资源,一旦出现链接假死,就会造成实际上客户端已经断开,

2020-10-12 20:58:48 165

原创 netty从入门到放弃--handler的生命周期

根据我们对netty服务端学习的顺序,我们学习了服务端启动过程,学习了消息载体,pipeline以及handler的使用,接下来学习下handler内部执行的一些情况我们来定义一个 LifecycleChannelInboundHandler ,它继承了ChannelInboundHandlerAdapter,我们来实现父类的方法进行日志打印,观察它每个方法被调用的顺序以及时机客户端连接并且向服务端发送消息客户端主要逻辑@Overrideprotected void initChannel(So

2020-10-08 23:01:19 596

原创 netty从入门到放弃—消息的粘包和拆包

何为拆包和粘包在我们计算机使用网络的过程中,计算机可能同时存在多个网络程序,网路上又有无数的网络应用在占用带宽,这就导致了我们的消息在底层的消息发送中,它很有可能是不完整的,在解释拆包和粘包之前,我们先来跑一段程序,代码的只要逻辑是客户端连续给服务端发送100条消息,看看服务端每次接收的结果,主要代码如下:客户端:bootstrap.group(nioEventLoopGroup)// .option(ChannelOption.SO_BACKLOG, 1024)

2020-10-08 22:54:11 228

原创 netty从入门到放弃—自定义协议在pipeline的使用

通过上一节的演示,我们自定义了三个消息实体 – 登录请求、登录回应以及用户上线通知消息;但是这些消息的解析以及逻辑处理都在一个handler里面执行,只是定义了几个消息体,就需要进行if else的判断,如果使用这种方式,当我们的消息体数量增加后,从而造成了if else泛滥。@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf byteBuf = (ByteBuf) msg;

2020-10-08 22:33:08 259

原创 netty从入门到放弃—自定义编解码协议

自定义协议什么是协议,不管是,无论是TCP请求还是HTTP请求,底层都按照一定的规则,发送发把数据包编码成为规定的数据格式进行发送,接收方按照相应的规则进行解码,从而解析到相应的数据;协议就类似我们的交通规则,定义了行人要走人行道,机动车走机动车道,如果没有交通规则的约束,那么就会发生坦克走人行道,大妈在高速路上跳广场舞了。如上图是一个浏览器进行的HTTP请求,请求中包含了请求头、请求参数、请求消息体以及返回头;这些都是HTTP请求中约定的数据结构,也就是通信协议;那么在netty中进行普通的tcp

2020-10-08 22:32:20 843

原创 netty从入门到放弃—channelHandler与pipeline

pipeline在netty的客户端和服务端的链接中,处理链接接入的是boss线程组,接入后的链接逻辑处理,要经过worker线程组进行处理,每一条链接在netty里面对应着一个channel,channel中处理不同的逻辑也对应了不同的处理器,叫handler,这些handler都存在在一个pipeline中;每个channel对应一个pipeline,pipeline是一个双向链表结构,对应着所有输入输出的消息逻辑处理;类似Tomcat的filterChain。ChannelHandlerpip

2020-09-22 14:35:42 200

原创 netty从入门到放弃--信息传输载体ByteBuf

1 ByteBuf的数据结构从上一篇的文章中可以看到,最终发送消息或者接收到消息时,都是一个ByteBuf对象,这一篇我们来探索下这个载体类。ByteBuf是一个数组结构,可以根据下标进行读写操作,也可以进行重复读写,这个完美的解决了传统Stream不可重复读写的问题。从上图从左到右分别是已废弃区域、可读区域、可写区域以及可扩容区域;已废弃字节区域是已经读过,无效的区域;可读区域是ByteBuf数据的主要区域,这个区域里是未读取的数据,后续读取数据都是从这里读取出来的;可写字节区域是后续写入数据时

2020-09-22 14:24:05 347

原创 netty从入门到放弃—什么是netty

在了解netty之前我们首先搞清楚,netty是什么?为什么要使用netty?在搞清楚这两个问题之前,我们看看jdk自身对网络传输的解决方案。1. 传统IO简单演示一下使用传统IO,客户端向服务端发送一段字符串的代码服务端public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8888); // 开启接收客户端连接线程 new

2020-09-22 08:32:08 265

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除