
网络基础
文章平均质量分 93
one2excellent
这个作者很懒,什么都没留下…
展开
-
自定义协议编解码:Codec(encode\decode)及Sharble注解详解
魔术:判断是否是无效数据包。版本号:可以支持协议的升级。序列化算法(对消息正文进行序列化以及反序列化):json、protobuf、hessian、jdk。指令类型:如登陆、注册、单聊、群聊跟业务相关的。请求序号:为了双工通信,提供异步能力。正文长度:消息正文:@Data/*** 根据消息类型字节,获得对应的消息 class* @param messageType 消息类型字节自定义协议编解码:Codec(encode\decode)及Sharble注解详解。所以我们上面自定义编解码器也不能加@Sharab原创 2024-06-04 08:46:18 · 978 阅读 · 0 评论 -
Netty初识Hello World & 事件循环对象(EventLoop)& 事件循环组 (EventLoopGroup)
基于Netty网络通信开发简易的服务端、客户端,以实现客户端向服务端发送hello world,服务端仅接收不返回数据。Netty、Handler、EventLoop、NioEventLoopGroup原创 2024-05-25 23:14:26 · 1055 阅读 · 0 评论 -
ByteBuffer消息边界消息丢失、扩容操作以及绑定服务端绑定读触发事件向客户端发送消息
使用以下命令将byteBuffer和具体的SelectionKey关联起来,随后当key触发读事件时,获取相关联的byteBuffer,并读取chanel中的数据至buffer,若buffer中未包含分隔符,此时需要将关联的byteBuffer取出、扩容、填充已读取数据、将新的byteBuffer关联到SelectionKey上。另一种思路是用多个数组组成 buffer,一个数组不够,把多出来的内容写入新的数组,与前面的区别是消息存储不连续解析复杂,优点是避免了拷贝引起的性能损耗。原创 2024-05-22 00:37:43 · 762 阅读 · 0 评论 -
阻塞、非阻塞、IO多路复用(Selector)网络编程
Selector 是基于事件驱动的 I/O 多路复用模型,主要运作原理是:通过 Selector 注册通道的事件,Selector 会不断地轮询注册在其上的 Channel。可以采用线程池技术来减少线程数和线程上下文切换,但治标不治本,如果有很多连接建立,但长时间 inactive,会阻塞线程池中所有线程,因此不适合长连接,只适合短连接。32 位 jvm 一个线程 320k,64 位 jvm 一个线程 1024k,如果连接数过多,必然导致 OOM,并且线程太多,反而会因为频繁上下文切换导致性能降低。原创 2024-05-19 17:04:29 · 1125 阅读 · 0 评论 -
IO模型:同步阻塞、同步非阻塞、同步多路复用、异步非阻塞
异步I/O(Asynchronous IO【AIO】):用户线程通过系统调用,向内核注册某个IO操作,内核在整个IO操作(包括数据准备、数据复制)完成后,通知用户程序,执行后续的业务操作。非阻塞I/O第一个阶段系统调用请求直接返回,可能误认为和阻塞I/O没有区别,实则非阻塞I/O直接返回后,其他进程也可以执行系统调用。不断进行轮询查看数据是否已由物理设备拷贝至内核缓冲区,当数据准备就绪后,将数据从内核缓冲区拷贝至用户缓冲区仍然是阻塞的。同步阻塞、同步非阻塞、异步非阻塞。关注的是线程的状态。原创 2024-05-25 12:37:33 · 821 阅读 · 0 评论 -
一文搞懂幂等,什么是幂等,常见的幂等实现方案有哪些,HTTP的四种请求是否是幂等的
通俗来讲:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。什么是幂等实现幂等的必要性幂等的实现技术有哪些唯一索引、组合索引Token机制悲锁乐观锁分布式锁Select + Insert系统对外提供的接口如何实现幂等性幂等和分布式系统的关系HTTP的四个请求是否是幂等的GET、PUT、DELETEPOST使用幂等性区分POST和PUT请求参考链接原创 2024-10-06 23:12:33 · 2278 阅读 · 0 评论 -
粘包、半包和Netty中的自定义帧解码器间的关系
自定义编解码器就是上面提到的第四种实现方案(head[length] body),貌似感觉非常正确不存在问题。对于粘包,自定义解码器能够很好处理,此时接收到的消息总量肯定大于需要解析的消息长度,此时不会产生问题。对于半包,如果此时发送方一条消息由于某种原因划分为两次发送,此时第一次发送后接收到接收到消息后,首先解析出消息头中的长度,直接使用解析到的长度提取对应的字节数,然而此时并不能提取到对应长度的字节数,此时就会反序列化失败。并不能处理此种情况的半包。原创 2024-08-31 21:55:39 · 1262 阅读 · 0 评论 -
NIO中的异步—ChannelFuture、CloseFuture以及异步提升在NIO中的应用
随后运行上述客户端代码,观察到日志输出如下:通过此输出日志发现借用channelFuture对象的channel方法获取的Channel对象并没有创建。原因分析:connect方法是异步的,意味着不等待连接建立,方法执行就返回了。因此channelFuture对象中不能【立刻】获取到正确的Channel对象。为什么不在一个线程中去执行建立连接、去执行关闭 channel【建立连接connet,关闭channel都是在EventLoopGroup中执行的。也即nio中执行的】,那样不是也可以吗?非要用这么原创 2024-08-19 09:34:26 · 1210 阅读 · 0 评论 -
IO多路复用中的水平触发和边缘触发、Java NIO中的水平触发举例
水平触发(Level-triggered,也被称为条件触发)LT:主要满足条件,就触发事件。边缘触发(Edge-triggered)ET:当状态变化时触发。使用脉冲信号来说明LT和ET:LT指信号只需要处于水平(高电平、低电平)就会一直触发;ET则是指信号为上升沿或下降沿时才会触发通知。举例说明:一个管道收到了1kb的数据,epoll会立即返回,此时读了512字节数据,然后再次调用epoll。如果是边缘触发的不会立即返回,原创 2024-08-18 19:52:08 · 1378 阅读 · 0 评论 -
网络编程-阻塞、非阻塞、多路复用、Selector对于accept、read、write事件监听实现详解
网络编程-阻塞、非阻塞、多路复用、Selector对于accept、read、write事件监听实现。详细讲解以及代码实现。原创 2024-08-18 17:20:25 · 900 阅读 · 0 评论 -
什么是Socket、Socket在Java中的应用、Socket和SocketChannel区别
理解Socket之间首先需要了解TCP\IP协议: TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。下面是他们三者的关系: 在OSI参考模型中将网络分为5层:应用层、传输层、网络层、数据链路层、物理层。原创 2024-07-27 19:47:48 · 864 阅读 · 0 评论