介绍

  1. Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。
  2. Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
  3. Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。
  4. Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。

前置知识

Socket
Socket(套接字)是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。
Socket 相当于是应用程序的大门,我们在网络中发送的报文都会经过这道大门才能够进入到应用程序中,让应用程序来使用报文中的数据。

要写网络程序就必须用Socket

群聊NIO案例

零拷贝大文件案例

实现简易RPC

客户端:

  • 服务发现,注册服务,监听服务更新
  • 负载均衡算法,随机哈希、轮询、LFU、LRU、LRT(最小响应时间)
  • 服务代理
  • Netty客户端实现

服务端:

  • 服务注册
  • Netty服务端实现

共同

  • 协议 + 序列化方式
  • 网络通信框架Netty
  • 注册中心,服务发现 zk
  • 心跳机制,超时断开连接

服务注册:
需要注册什么信息?多个服务提供者如何组织数据结构?

  • 以服务为节点?以服务提供者为节点?
  • 信息可能需要包含服务提供者的ip,port,服务元信息(服务类名,版本号)
  • 提供者掉线了,需要从注册中心中删除,心跳机制

协议:

  • 头部(最好固定多少字节)
    • 请求ID,用来唯一标识一次RPC,64bits=8字节
    • Request/Response
    • State 状态
    • body部分序列化方式
    • body长度 4字节
  • body部分(这部分长度=上述body长度)
    • 服务名
    • 服务版本
    • 方法名
    • 方法参数类型列表
    • 方法参数列表
    • 拓展?可以是一个map结构

    • 返回error
    • 返回类型,这个感觉可以不用,因为client知道返回类型应该是啥。
    • 返回结果

参考资料:
Netty 学习手册 (dongzl.github.io)

Snailclimb/guide-rpc-framework: A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。) (github.com)

luxiaoxun/NettyRpc: A simple RPC framework based on Netty, ZooKeeper and Spring (github.com)

tang-jie/NettyRPC: NettyRPC is high performance java rpc server base on Netty,using kryo,hessian,protostuff support message serialization. (github.com)