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()即可














posted on 2018-03-06 18:16  xiaojiayu0011  阅读(127)  评论(0)    收藏  举报

导航