序列化数据及RPC

JDK提供了ObjectOutputStream和ObjectInputStream,用于通过网络对POJO的基本数据类型的图进行序列化反序列化。

Google的Protobuf

  • 支持跨平台、多语言(支持目前巨大多数语言,例如C++、C#、Java、Python等;
  • 高性能、高可靠性;
  • 使用protobuf编译器能自动生成代码,Protobuf是将类的定义使用.proto文件进行描述,然后通过protoc.exe编译器根据.proto自动生成.java文件;

自定义RPC

RPC:远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络实现的技术。常见的RPC框架有:Dubbo、Spring Cloud, grpc等。

  1.  client以本地调用方式调用服务。
  2. client stub接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体
  3. client stub将接收到的消息进行编码并发送到服务端
  4. server stub收到消息后解码
  5. server stub根据解码结果调用本地服务
  6. server stub 将返回导入结果进行编码并发送至消费方
  7. client stub 接收到消息并进行解码
  8. 服务消费方(client)得到结果

设计与实现

  • Client(服务的调用方): 两个接口 + 一个包含 main 方法的测试类
  • Client Stub: 一个客户端代理类 + 一个客户端业务处理类
  • Server(服务的提供方): 两个接口 + 两个实现类
  • Server Stub: 一个网络处理服务器 + 一个服务器业务处理类

注意: 服务调用方的接口必须跟服务提供方的接口保持一致(包路径可以不一致)
最终要实现的目标是: 在 TestNettyRPC 中远程调用 HelloRPCImpl 或 HelloNettyImpl 中的方法
 

猜你喜欢

转载自blog.csdn.net/weixin_39443483/article/details/114871983