Netty
文章平均质量分 70
冷环渊
这里是四年学习Java的小冷,
腾讯云技术笔者
阿里云专家博主
阿里云程序员2022 1024高并发技术征文top1
亚马逊云优质技术征文作者
展开
-
Netty功能实现:实现心跳检测
netty实现心跳检测检测逻辑:1) 服务端启动,客户端建立连接,连接的目的是互相发送消息。2) 如果客户端在工作,服务端一定能收到数据,如果客户端空闲,服务端会出现资源浪费。3) 服务端需要一种检测机制,验证客户端的活跃状态,不活跃则关闭。需求设计:1) 客户端向服务端发送 “I am alive” , sleep一个随机时间,模拟空闲状态2) 服务端收到消息后,返回“over”, 客户端有空闲,记录空闲次数3) 设定阈值,达到阈值时主动关闭连接服务端编写public class H原创 2021-11-30 18:54:47 · 4225 阅读 · 12 评论 -
Netty原理:pipeline
ChannelPipelinepipeline中维护入站和出站链路,两条链路的执行顺序。handler只负责处理自身的业务逻辑,对通道而言,它是无状态的。通道的信息会保存到handlerContext处理器上下文中,它是连接pipeline和handler之间的中间角色。pipeline管理的是由handlerContext包裹的handler,也就是说,当添加handler时,先将其转为handlerContext,然后添加到pipeline的双向链表中。头结点叫做HeadContext,尾节点叫做原创 2021-11-25 13:00:56 · 871 阅读 · 0 评论 -
Netty原理:ChannelHandler
ChannelHandler类层次关系图入站和出站:从服务端的角度,数据从客户端发送到服务端,称之为入站,当数据处理完成返回给客户端,称之为出站。是相对的概念。从客户端的角度,数据从服务端发送给客户端,称之为入站,当数据返回给服务端,称之为出站。不论是入站还是出站,handler从一端开始,到另一端结束,以责任链的模式依次执行。责任链模式——“击鼓传花”,当请求被不同的接收者处理时,每个接收者都包含对下一个接收者的引用,一个接收者处理完成后,将依次向下传递。适配器模式——出国时要使用的电源转原创 2021-11-24 23:58:07 · 488 阅读 · 0 评论 -
Netty原理:Channel
Channel1)Channelchannel是通讯的载体,对应通讯的一端,在BIO中对应Socket,NIO中对应SocketChannel,Netty中对应NioSocketChannel,ServerSocket同理。channelhandler是通道的处理器,一个channel往往有多个handlerchannelpipeline是handler的容器,装载并管理handler的顺序(本质是双向链表)如图,channel创建时,会对应创建一个channelpipeline,pipelin原创 2021-11-24 23:56:02 · 767 阅读 · 0 评论 -
Netty原理:ByteBuf对Nio bytebuffer做了什么导致效率提升?
ByteBufNIO中ByteBuffer的缺点:A 长度固定,无法动态的扩容和缩容,缺乏灵活性B 使用一个position记录读写的索引位置,在读写模式切换时需手动调用flip方法,增加了使用的复杂度。C 功能有限,使用过程中往往需要自行封装1)分类按照内存的位置,分为堆内存缓冲区 heap buffer、直接内存缓冲区direct buffer、复合内存缓冲区composite buffer。A heap buffer将数据存储到JVM的堆空间中,实际使用字节数组byte[]来存放。原创 2021-11-23 23:26:38 · 945 阅读 · 2 评论 -
Netty: WebSocket应用,代码demo
WebSocket为什么使用进阶版呢? 新的技术肯定是解决了 技术的问题Http协议都的缺陷 :通信只能由客户端发起,需要一种服务端能够主动推送到能力 –websocket**websocket:**这是一种双向通信的能力 也叫做 : “全双工”websocket是由浏览器发起的通常我们使用 http叫做 : 短连接 性能好一点用 websocket 叫做 : 长连接 复用性高一些适用于不同场景这里我们还是使用 http来链连接 只不过 连接之后就传输信息 直到断开为止应为原创 2021-11-21 21:53:58 · 753 阅读 · 0 评论 -
Netty应用:快速了解http各版本的特性 HttpServer的小demo
HTTP协议0.9版本GET /index.html服务端只能返回html格式,传输过程只能处理文字。1.0版本支持任何格式的内容,包括图像、视频、二进制等等引入了POST命令、HEAD命令HEAD命令 : 这个命令和 get 是有相似之处的 只返回头部信息,不会返回全部内容,速度较快,一般用来验证连接的有效性增加了请求头、状态码,以及权限、缓存等那么1.0 他的会是什么样子的呢?请求GET / HTTP/1.0User-Agent:Mozilla/1.0Accept:原创 2021-11-20 21:24:49 · 1112 阅读 · 7 评论 -
基于NIO的多客户端群聊
基于NIO的多客户端群聊分析需求服务端监听客户端状态保存客户端聊天记录将客户端的信息分发给其他客户端 群聊客户端连接服务端接受服务端分发的消息发出消息代码编写代码里有详细的注释,这里我们主要是看一下编写步骤服务端---------------------初始化------------------------------1.开启serversocket通道2.开启选择器3.设置非阻塞,注册任务--------------------监听客户端------------原创 2021-11-17 22:39:04 · 684 阅读 · 4 评论 -
Netty: NIO Selector选择器(C/S demo详细注释与源码)
Netty 基础 java NIOSelector三个元素: Selector选择器、SelectableChannel可选择的通道、SelectionKey选择键本质上,Selector是监听器,监听的是通道是否有我们关心的操作产生,操作对应的是事件(连接、接收、读/写),使用SelectionKey代表具体的事件,在确保通道是可选择的情况下,将通道注册进选择器中,此时Selector维护的是,通道和事件之间的关联关系。Selector,管理被注册的通道集合,以及他们的状态Selectable原创 2021-11-16 18:11:35 · 1057 阅读 · 0 评论 -
Netty:NIO buffer 原理(附 示例代码)
Java:NIO buffer 原理理解NIO 是同步,非阻塞NIO 和 BIO 最大不同在于BIO是面向流的NIO是面向块(缓冲区)的NIO将文件或文件中的一段区域映射到内存中,可以像访问内存一样访问文件那么今天我们打卡点知识就是 java NIO 中的 缓冲区接口 BufferBuffer我们以 cahrBuffer为例子capacity 总体容量大小limit 存储容量的大小,是可读写和不可读写的界线position 已读容量的大小,已读和未读区域的界线【使用原理】a) 初原创 2021-11-16 12:55:58 · 522 阅读 · 0 评论 -
Netty高性能网络通信:NIO
前言给大家推荐一个知识交流社区哪吒社区在这里新手小白可以得到十分有力度技术依靠,进阶的小伙伴可以在大佬的文章中得到提升学习较深的大佬们可以互相讨论技术的心得认识NettyNetty 网络编程框架 他可以做到什么?自定义通信协议 自定义编码/解码字节流没有netty之前我们是用什么的?java.net + java .io java.nio Mina /GrizzlyNetty的特点并发高基于 NIO网络通信框架,比较BIO性能得到了提升传输快NIO原创 2021-11-13 23:34:45 · 1202 阅读 · 9 评论