![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
黑洞刺客
这个作者很懒,什么都没留下…
展开
-
Netty之心跳重连
心跳定义心跳即在TCP长连接中,客户端和服务器之间定期发送的一种特殊的数据包,通知对方自己还在线,以确保TCP连接的有效性。为什么需要心跳因为网络的不可靠性,有可能在TCP保持长连接的过程中,由于某些突发情况,例如网线被拔出,突然掉电等,会造成服务器和客户端的连接中断。在这些突发情况下,如果恰好服务器和客户端之间没有交互的话,那么它们是不能在短时间内发现对方已经掉线的.。为了解决这个问题,我...原创 2020-04-30 11:17:24 · 337 阅读 · 0 评论 -
Netty之粘包拆包解决
粘包拆包表现形式产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。下面示意图能更加形象的说...原创 2020-04-27 15:30:22 · 396 阅读 · 0 评论 -
Netty之HashedWheelTimer源码分析
简介HashedWheelTimer是Netty的一个工具类,来自netty-common包,简单来说用于实现延时任务。使用场景:dubbo失败重试、netty中长连接超时(如客户端由于网络原因导致无法传送心跳至服务端)。优缺点优点:添加、删除、取消延迟任务,能高效地处理大批定时任务缺点:占用内存较高、避免创建多个HashedWheelTimer实例,时间精度要求不高结构图先根据上...原创 2020-02-26 12:37:26 · 743 阅读 · 0 评论 -
NIO selector多路复用
public class NioServer { // 通道选择器,监控多个Channel并决定哪些channel能进行读或写,一个selector管理多个channel private Selector selector; public NioServer init(int port) throws IOException{ // 创...原创 2019-11-14 11:36:53 · 128 阅读 · 0 评论 -
Netty启动流程
1. 服务端启动流程// ServerSocketChannel初始化注册过程bind(int inetPort)- doBind(final SocketAddress localAddress)- initAndRegister()- this.channelFactory.newChannel()(实例化NioServerSock...原创 2019-11-13 17:46:30 · 222 阅读 · 0 评论