文章目录
  1. 1. Netty入门
  2. 2. IO通信
  3. 3. Netty与原生NIO的对比
  4. 4. WebSocket入门

Netty入门

  • 什么是Netty?
    • 是一个Java IO开源框架
    • 高性能事件驱动、异步非堵塞
    • 由JBoss提供,用于建立底层的TCP等连接
    • 可用来快速开发高性能客户端和网络服务器
    • 基于NIO的客户端,服务端编程框架
    • 提供了良好的稳定性和伸缩性
  • Netty的使用场景
    • 高性能领域
      • 游戏、大数据分布式计算等
    • 多线程并发领域
    • 异步通信领域

IO通信

  • BIO通信
    • 特点 :
      • 阻塞同步IO
      • 由一个线程负责连接
      • 一请求一应答模式
      • 缺乏弹性伸缩能力
    • 简单来说差不多就是这样的 :
  • 伪异步IO通信
    • 特点 :
      • 阻塞同步IO
      • 由线程池负责连接
      • M请求N应答模式
      • 可能造成线程池阻塞
    • 图示 :
  • NIO通信
    • 特点 :
      • 非阻塞同步IO
      • 通过缓冲区Buffer处理流数据
      • 由Channel读取或写入网络数据
      • 多路复用器Selector :
        • 若某个Channel上发生了读或写事件,则称为就绪状态
        • Selector即负责不断轮询,以找到处于就绪状态的Channel们
        • 再通过SelectionKey获取就绪Channel的集合,以进行后续操作
    • 通道与流的区别 :
      • 通道是双向的,流是单向的
      • 流只能在某一方向进行读操作或写操作
      • 但通道即能读又能写,甚至可以同时进行
  • AIO通信
    • 特点 :
      • 非阻塞异步IO
      • 连接注册读写事件和回调函数
      • 读写方式异步
      • 主动通知程序
    • 备注 :
      • 真正的异步非阻塞IO
      • 不需要通过Selector轮询即可实现异步读写

Netty与原生NIO的对比

  • 原生NIO :
    • 类库和API繁杂
    • 入门门槛高
    • 工作量和难度大
    • 存在典型bug(如epoll空轮询等)
  • Netty :
    • API简单,可扩展性强
    • 入门门槛低
    • 性能高
    • 成熟、稳定

WebSocket入门

  • 什么是WebSocket?
    • H5提出的协议规范
    • 基于握手机制来建立连接
    • 为解决客户端与服务器实时通信而产生
    • 本质上是一个基于ICP的协议,是通过HTTP/HTTPS协议发起一条特殊的HTTP请求,进行握手后创建一个用于交换数据的TCP连接;此后,服务端和客户端便可通过此TCP连接进行实时通信(就不需要之前那条进行握手请求的HTTP参与了)
  • WebSocket特点 :
    • 节省通信开销(因为轮询需要不断向服务器发送请求,而即使是只发送一条很小的信息,也必须把不短的HTTPRequestHeader完整送出,这样就会占用不必要的带宽和服务器资源)
    • 服务器主动传送数据给客户端
    • 实时通信
  • WebSocket连接建立 :
    • 客户端发起握手请求
    • 服务端响应请求
    • 建立连接
  • WebSocket生命周期 :
    • 打开(open)事件 :
      • 发生在新连接建立之时、其他事件发生之前
      • 伴随着三部分信息 :webSocketSession对象(用于表示已经建立好的连接)、配置对象(包含了用来配置端点的信息),及一组路径参数(用来打开阶段握手时WebSocket端入站时匹配的URI)
    • 消息(message)事件 :
      • 主要用来接收WebSocket对话中另一端发送的消息
      • 消息将以三种基本形式抵达 :文本消息、二进制消息、Pong消息
      • 一般使用带String参数的方法处理文本消息;使用带Buffer或数组参数的方法处理二进制文本;使用PongMessage接口实例处理Pong消息
    • 错误(error)事件 :
      • 在WebSocket连接或端点发生错误时产生
      • 可以处理WebSocket实现入站时发生的各种异常
      • 三种基本错误类型 :WebSocket建立连接时 :SessionException;试图将入站消息解码成开发人员所需要的对象时 :DecodeExceptiom;由WebSocket端点产生的其他运行时错误等
    • 关闭(close)事件 :
      • 可由参与连接的任意一个端点发出
      • 表示此次WebSocket连接关闭
  • WebSocket连接关闭 :
    • 两种方式 :
      • 服务器关闭底层TCP连接(正常)
      • 客户端发起 TCP Close(异常)
    • 所以说一般是由服务器发起TCP Close操作,客户端等待关闭就好
文章目录
  1. 1. Netty入门
  2. 2. IO通信
  3. 3. Netty与原生NIO的对比
  4. 4. WebSocket入门