netty
文章平均质量分 94
南猫信巷
这个作者很懒,什么都没留下…
展开
-
Netty应用(七) ----MQTT编解码器
这里梳理下netty中对mqtt协议的编码和解码的处理。一方面对mqtt协议的结构再巩固些,另一方面就是学习下netty中对字节的处理。对于MQTT协议,可以参考前一篇文章MQTT协议详解。原创 2023-12-19 15:16:50 · 1588 阅读 · 0 评论 -
Netty应用(六) ---- netty源码(待完善)
在执行完doRegister()方法方法后,在invokeHandlerAddedIfNeeded中会回调initAndRegister()方法中添加的处理器中的initChannel方法,给pipeline上又添加了一个ServerBootstrapAcceptor处理器。里面有两个重要的方法,如下图。bind方法的层级比较深,建议通过debug模式往下看,不要自己点。在initAndRegister()方法中,我们先看初始化的逻辑,即。我们看下bind方法的内部调用链,找到doBind方法。原创 2023-12-14 17:01:48 · 970 阅读 · 0 评论 -
Netty应用(五) ---- netty优化
我们定义的messagePb.proto文件本身就是消息的定义,所以我们如果补全文件的话,相当与我们之前定义的那些消息请求,都集成到MessagePb这一个类中,并且还有对应的set/get方法。这称为Nagle算法。注意我们编译后生成的类名,就是取的文件名,所以我们这边不叫message.proto,否则和我们之前的messge类重名,导包会麻烦。当处理Accept的速率小于连接建立的速率时,全连接队列中堆积的连接数大于SO_BACKLOG设置的值是,便会抛出异常。我们打开代码后,会发现是缺少依赖的。原创 2023-12-12 19:52:05 · 899 阅读 · 0 评论 -
Netty应用(四) ----聊天室
Data@Slf4j@Override// 1. 4个字节的魔数// 2. 1字节的版本// 3. 1字节的序列化方式,0-jdk 1-json// 4. 1字节表示消息类型,比如登录、退出..// 5. 4字节表示消息请求序号// 由于4+1+1+1+4+4=15,我们再加一字节用于补齐,无意义// 6. 4字节表示消息的长度// 7.消息正文@Override。原创 2023-12-08 17:42:18 · 822 阅读 · 0 评论 -
Netty应用(三) ----协议设计与解析
魔数,用来在第一时间判定是否是无效数据包,一般协议的头几个就是魔数,比如Java字节码魔数是cafe版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian等指令类型,跟业务相关,即消息类型请求序号,为了双工通信,提供异步能力正文长度:通过正文长度才知道接下来的正文长度是多长消息正文: 用户名,密码等等,我们通常用 json 或者 xml 格式,java也支持对象流(序列化)原创 2023-12-07 15:29:46 · 996 阅读 · 0 评论 -
Netty应用(二) ---- 粘包半包的处理
滑动窗口其实就是一个缓冲区,在滑动窗口内发送的数据,无需接收响应,可以继续发送。当第一个数据ack确认之后,滑动窗口就会向下移动一个单位。当接收方的滑动窗口设置足够大,并且接收方处理不及时的情况下,发送方发过来的数据就会在接收方的滑动窗口中缓冲多个报文,最终导致粘包。当接收方的滑动窗口设置小于实际发送量,就只能先处理一部分数据,等ack确认后再处理后续的,就导致了半包的情况。我们可以调节server端接收缓冲区的大小,设置小一点,当client端一次发送的包size超过设置最大值的时候,就会发生半包现象。原创 2023-12-07 11:38:26 · 785 阅读 · 0 评论 -
netty应用(一)--netty入门及组件
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。注意:这里的异步不要和异步IO混淆,这里的异步指Netty使用多线程来完成结果传送,让发送请求的线程不阻塞。优点Nio开发工作量大,bug多需要自己构建协议netty解决 TCP 传输问题,如粘包、半包nio中在liunx系统中epoll 空轮询导致 CPU 100%原创 2023-12-07 11:37:27 · 955 阅读 · 0 评论