2.
protobuf:编译命令
3. netty(rocketmq闭源了):直接下载jar便可
a.简单,健壮性,性能,扩展性强,众多开源项目支持(如dubbo),
很好支持protobuf,支持大文件传输
4. 纯nio通信步骤(繁琐):
a.建立ServerSocketChannel,配置非阻塞模式
b.绑定监听,配置TCP参数,录入backlog大小等
c.建立一个独立的IO线程,用于轮询多路复用器Selector
d.建立Selector,将已建立的ServerSocketChannel注册到Selector上,并设置监听标识位SelectionKey.ACCEPT
e.启动IO线程,在循环体中执行Seclect.select()方法,轮训就绪的通道
f.当轮训处处于就绪的通道时,须要判断操做位,若是为ACCEPT状态,则说明新客户端接入,执行accept方法接受新的客户端
g.设置新接入客户端的一些参数,如非阻塞、并将其通道继续注册到Selector中,设置标识位等
h.轮询到通道操做位为READ,则进行读取操做等
5.Netty通信步骤(简单):
a.建立两个Nio线程组,一个用于网络事件处理(接受客户端链接),另外一个进行网络通信读写
b.建立一个ServerBootstrap对象,配置netty对应初始化参数
c.建立一个实际处理数据的类ChannelInitializer,进行初始化的准备工做,如数据的字符集等
d.绑定端口,执行同步阻塞方法等待服务器启动便可
6.tcp拆包黏包问题产生缘由:
1.程序write写入的字节大小大于套接字发送缓冲区的大小
2.进行MSS大小的TCP分段
3.以太网帧的payload大于MTU进行ip分片
主流解决方案:
1.消息定长(固定字节数),不够空位补空格
2.在包尾增长特殊字符进行分割(如回车)
3.将消息分为消息头和消息体(相似报文),在消息头中包含消息总长度的字段,而后进行业务逻辑处理
4.pojo也可
7.
数据通信场景分析:
经过
ReadTimeoutHandler进行超时监测,下次链接经过新起线程再次进行链接
8.心跳检测:在服务器集群中会用来监测各节点是否存活
客户端Handler继承ChannelHandlerAdapter,重写channelActive()便可