Netty
文章平均质量分 79
稻草人0.0
一个农村大学生在大城市迷茫的流浪着...
展开
-
Netty 进阶学习(十一)-- 扩展与源码
1、第一次握手,client 发送 SYN 到 server ,状态修改为 SYN_SEND ,server 收到,状态改变为 SYN_REVD,并将该请求放入 sync queue 队列。2、第二次握手,server 回复 SYN + ACK 给 client,client 收到,状态改变为 ESTABLISHED ,并且发送 ACK 给 server。我们就来看看 netty 中对下面的代码是怎样进行处理的。属于 SocketChannel 参数。来设置大小(NIO 通过。Gson 需要的依赖。原创 2022-09-08 00:16:35 · 449 阅读 · 0 评论 -
Netty 进阶学习(十)-- 协议设计与解析
魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以有此扩展。如json、protobuf、hessian、jdk指令类型,是登录、注册、单聊、群聊…跟业务相关请求序号,为了双工通信,提供异步能力(不按顺序发送和接收)正文长度(解决粘包半包问题)消息正文(使用序列化算法,编码和解码,json、xml、对象流等)原创 2022-09-07 23:58:24 · 568 阅读 · 0 评论 -
Netty 进阶学习(九)-- 粘包与半包
链路层对一次能够发送的最大数据有限制,这个限制称之为 MTU(maximum transmission unit),不同的链路设备的 MTU 值也有所不同,例如。TCP 以一个段(segment)为单位,每发送一个段就需要进行一次确认应答(ack)处理,但如果这么做,缺点是包的往返时间越长性能就越差。消息边界就是分隔符,不再浪费空间,但是内容使用分隔符就需要进行转义,效率也不是很高。消息边界也就是固定长度,这种方式实现简单,但是空间有极大的浪费,不推荐使用。字节的数据,查看结果,存在接收到。原创 2022-09-07 23:49:53 · 485 阅读 · 0 评论 -
Netty学习(八)-- 练习
的双向信号传输,即时是阻塞 IO,读和写是可以同时进行的,只要分别采用读线程和写线程即可,读不会阻塞写、写也不会阻塞读。Java Socket 是全双工的,线路上存在。实现一个 echo Server。原创 2022-09-06 23:54:19 · 149 阅读 · 0 评论 -
Netty学习(七)-- ByteBuf
分析:(源码)原创 2022-09-06 23:51:39 · 739 阅读 · 0 评论 -
Netty学习(六)-- Handler & Pipeline
ChannelInboundHandlerAdapter 是按照 addLast 的顺序执行的,而 ChannelOutboundHandlerAdapter 是按照 addLast 的逆序执行的。每个 Channel 是一个产品的加工车间,Pipeline 是车间中的流水线,ChannelHandler 就是流水线上的各道工序,而后面要讲的 ByteBuf 是原材料,经过很多工序加工:先经过一道道入站工序,再经过一道道出站工序最终变成产品。原创 2022-09-06 23:48:22 · 211 阅读 · 0 评论 -
Netty学习(五)-- Future & Promise
首先要说明 Netty 中的 Future 与 JDK 中的 Future 同名,但是是两个接口,Netty 的 Future 继承自 JDK 的 Future,而 Promise 又对 Netty Future 进行了扩展。(return 结果)转到了U盘里,第二天拿给你。Future 是被动的,是由执行任务的那个线程往里面填结果。通过以上两个例子 Future 都是由提交任务时返回创建的,被动的拿到 Future。(另一个线程)带点学习资料给你,朋友说你有没有。(Future 对象),我给装过来。原创 2022-09-06 23:46:06 · 199 阅读 · 0 评论 -
Netty学习(四)-- Channel
思考下面的场景,4 个医生给人看病,每个病人花费 20 分钟,而且医生看病的过程中是以病人为单位的,一个病人看完了,才能看下一个病人。因此可以做如下优化,只有一开始,医生 2、3、4 分别要等待 5、10、15 分钟才能执行工作,但只要后续病人源源不断地来,他们就能够满负荷工作,并且处理病人的能力提高到了。的,执行该方法的是 NIO 的线程,main 线程代码会继续向下运行。而建立连接需要一定的时间,继续向下执行的获取 Channel 和 发送数据的代码就不符合逻辑了。方法建立连接,该方法是。原创 2022-09-06 23:44:19 · 393 阅读 · 0 评论 -
Netty学习(三)-- EventLoop
如前面例子中的 boss(只负责 ServerSocketChannel 上 accept 事件) 和 worker(只负责 SocketChannel 上的读写事件) 两个角色。方法来绑定其中一个 EventLoop,后续这个 Channel 上的 IO 事件都由此 EventLoop 来处理(保证了 IO 事件处理时的线程安全)可以看到两个工人(EventLoop )轮流处理 Channel,但 工人(EventLoop ) 与 Channel 之间进行了绑定。EventLoop 本质是一个。原创 2022-09-06 23:36:20 · 327 阅读 · 0 评论 -
Netty学习(二)-- 概述和初体验
Netty 是由 Trustin Lee 提供的一个 Java 开源框架,现为 GitHub 上的独立项目。Netty 是一个基于 NIO 的客户、服务器端的编程框架。Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。原创 2022-09-06 22:48:01 · 875 阅读 · 0 评论 -
Netty学习(一)-- Netty 底层 Java NIO
Selector 的作用就是配合一个线程来管理多个 Channel 上发生的事件,获取这些 Channel 上发生的事件,这些 Channel 工作在非阻塞模式下,不会让线程吊死在一个 Channel 上。会阻塞直到 Channel 发生了读写事件,这些事件发生,select() 会返回这些事件交给 thread 来处理。1、Java 本身并不具备 IO 读写能力,因此 read 方法调用后,要从 java 程序的。阻塞的表现就是线程暂停了,暂停期间不会占用 CPU,但线程相当于闲置。原创 2022-09-06 00:03:00 · 328 阅读 · 0 评论 -
Java NIO 学习
JAVA NIO (New IO 也称之为 Non-Blocking IO) 是从 Java 1.4 版本开始引入的一个新的 IO API,可以代替标准的 Java IO API。NIO 与 原来的 IO 有同样的作用和目的,但是工作方式完全不一样:标准的 IO 基于字节流和字符流进行操作的;NIO 支持面向缓冲区(Buffer),基于通道(Channel)的 IO 操作,数据总是向通道读取到缓冲区中,或者从缓冲区中写入通道中。NIO 以更加高效的方式进行文件的读写操作。NIO 和传统 IO 之间第一个最大原创 2022-07-30 21:47:33 · 394 阅读 · 0 评论