netty

 2. protobuf:编译命令
3. netty(rocketmq闭源了):直接下载jar便可
  netty的byteBuf与原生byteBuffer对比: http://blog.csdn.net/zs_scofield/article/details/53100147 
  为何选择netty: https://zhuanlan.zhihu.com/p/26928023 
  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.绑定端口,执行同步阻塞方法等待服务器启动便可
   推荐网站:  http://ifeve.com/netty5-user-guide/  
6.tcp拆包黏包问题产生缘由:
   1.程序write写入的字节大小大于套接字发送缓冲区的大小
   2.进行MSS大小的TCP分段
   3.以太网帧的payload大于MTU进行ip分片
 主流解决方案:
   1.消息定长(固定字节数),不够空位补空格
   2.在包尾增长特殊字符进行分割(如回车)
   3.将消息分为消息头和消息体(相似报文),在消息头中包含消息总长度的字段,而后进行业务逻辑处理 
   4.pojo也可
7. 数据通信场景分析:
   
   经过 ReadTimeoutHandler进行超时监测,下次链接经过新起线程再次进行链接
8.心跳检测:在服务器集群中会用来监测各节点是否存活
  
    客户端Handler继承ChannelHandlerAdapter,重写channelActive()便可












相关文章
相关标签/搜索