天气:晴
今天学习内容
一、log4j整合到netty
1.引入依赖(maven)
2.配置log4j的配置文件
二、TCP拆粘包
网络信息的传输是无消息保护边界的,发送多个信息的时候,接收方无法保证接受的信息如何分解为一个个完整的个体,有时候会吧两个信息接到一起,这就是粘包,把一个信息分段接受这就是拆包
三、自定义协议解决拆粘包问题
使用自定义协议+编解码器来解决,关键就是要解决服务器端每次读取数据长度的问题,避免服务器多读少读数据。
1.编写基本的客户端服务端类
2.编写一个协议包类MessageProtocol,包含长度length属性和文本content属性,提供get,set方法
3.在handler里的channelActive方法中发送数据的时候计算出数据的byte[]长度,赋值给协议包,传递给接收方按照该协议读取
4.因为传送的是一个协议包类,要读取协议包就需要一个对应的编解码类
这里的步骤:
传递的信息——》编码封装信息为MessageProtocol——》传递接收——》解码MessageProtocol的文本属性——》显示在接收方
四、netty服务器启动源码剖析
1.创建的bossgroup不传参数,会获取计算机的核数,创建核*2的线程池
2.handler链表添加新的handler时候,是加载tail前一个位置
newCtx.prev = prev;
newCtx.next = tail;
prev.next = newCtx;
tail.prev = newCtx;