JDK提供了ObjectOutputStream和ObjectInputStream,用于通过网络对POJO的基本数据类型的图进行序列化和反序列化。
Google的Protobuf
- 支持跨平台、多语言(支持目前巨大多数语言,例如C++、C#、Java、Python等;
- 高性能、高可靠性;
- 使用protobuf编译器能自动生成代码,Protobuf是将类的定义使用.proto文件进行描述,然后通过protoc.exe编译器根据.proto自动生成.java文件;
自定义RPC
RPC:远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络实现的技术。常见的RPC框架有:Dubbo、Spring Cloud, grpc等。
- client以本地调用方式调用服务。
- client stub接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体
- client stub将接收到的消息进行编码并发送到服务端
- server stub收到消息后解码
- server stub根据解码结果调用本地服务
- server stub 将返回导入结果进行编码并发送至消费方
- client stub 接收到消息并进行解码
- 服务消费方(client)得到结果
设计与实现
- Client(服务的调用方): 两个接口 + 一个包含 main 方法的测试类
- Client Stub: 一个客户端代理类 + 一个客户端业务处理类
- Server(服务的提供方): 两个接口 + 两个实现类
- Server Stub: 一个网络处理服务器 + 一个服务器业务处理类
注意: 服务调用方的接口必须跟服务提供方的接口保持一致(包路径可以不一致)
最终要实现的目标是: 在 TestNettyRPC 中远程调用 HelloRPCImpl 或 HelloNettyImpl 中的方法