Netty
介绍
Netty
是由JBOSS
提供的一个Java
开源框架,现为Github
上的独立项目。Netty
是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络IO
程序。Netty
主要针对在TCP
协议下,面向Client
端的高并发应用,或者Peer-to-Peer
场景下的大量数据持续传输的应用。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)
luxiaoxun/NettyRpc: A simple RPC framework based on Netty, ZooKeeper and Spring (github.com)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LegGasai's CSLearning!
评论