编程语言
首页 > 编程语言> > NIO网络编程

NIO网络编程

作者:互联网

服务端
需要不断循环从selector里拿key

客户端

selectkey需要获取后立马从select里删除,不然会循环拿这个selectkey

阻塞与非阻塞模型

网络断开处理

粘包处理&&消息边界

  1. 自定义分割符,比如\n
  2. 客户端服务端商量好大小
  3. 定义一种结构TLV(type length value)/LTV(length type value):http1.1使用TLV,http2.0使用LTV
优缺点:
  1. 自定义分隔符实现简单,缺点每一个字符都要去判断是否是分隔符,效率低下,如果发送的数据比较长,需要考虑扩容
  2. 客户端与服务的对其大小,缺点是浪费带宽,客户端发送数据不足也得补齐
  3. TLV/LTV 优点是节省带宽,需要多少读多少,缺点是服务器需要提前分配byteBuffer,如果内容过大,影响server吞吐量
扩容的处理

读取不到消息的边界,就需要扩容扩容时需要注意把之前读取的byteBuffer数据放到扩容后的byteBuffer里,可以通过attach 属性将byteBuffer放入socketChanner,这里有个复制问题,后面用零拷贝解决
image

标签:需要,byteBuffer,LTV,TLV,编程,网络,key,客户端,NIO
来源: https://www.cnblogs.com/dilumudo/p/16221544.html