Go to file
chenyq 6f0c6c7540 接口调用服务端的实现类 2025-07-26 23:42:56 +08:00
src/main 接口调用服务端的实现类 2025-07-26 23:42:56 +08:00
README.md Update README.md 2025-07-26 11:15:06 +08:00
pom.xml ADD pom.xml 2025-07-26 11:02:48 +08:00

README.md

一、RPCRemote Procedure Call Protocol 远程过程调用协议): RPC是指通过网络从远程计算机程序上请求服务不需要了解底层网络技术的协议使得不同的服务间方法调用就像本地调用一样便捷。 常见的RPC技术框架有应用级的服务框架阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud远程通信协议RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)通信框架MINA 和 Netty 二、RPC核心功能 RPC的核心功能实现主要分为三个部分分别是服务寻址、序列化反序列化和网络传输。 (一) 服务寻址: 在本地方法调用中函数体是直接通过函数指针来指定的但是在远程调用中由于两个进程的地址空间完全不一样函数指针不起作用。想要进行远程调用必须要让服务器知道客户端想要调用的函数因此RPC中所有函数或方法都有自己的一个ID在所有进程中都唯一。客户端在做远程过程调用时必须附上这个ID即客户端会查一下表找出相应的Call ID然后传给服务端服务端也会查表来确定客户端需要调用的函数然后执行相应函数的代码并返回结果给客户端也就实现了基本的RPC。 (二)序列化反序列化: 序列化与反序列化是一组相反的功能,主要实现消息对象与二进制流之间的转化。 在本地调用中,只需要将数据压入栈中,然后让函数去栈中读取即可。 但远程调用需要进行数据传输,由于客户端和服务端不在同一个服务器上,涉及不同的进程,不能通过内存传递参数,此时就需要客户端先将请求参数转成字节流(编码),传递给服务端,服务端再将字节流转为自己可读取格式(解码),这就是序列化和反序列化的过程。反之,服务端返回值也逆向经历序列化和反序列化到客户端。将消息对象转为二进制字节流后,方便进行网络传输,并能实现跨平台、跨语言等功能。 (三)网络传输: 网络传输主要实现客户端和服务器的通信客户端将Call ID和序列化字节流传给服务器服务器将结果序列化后回传给客户端。基于TCP协议的网络传输实现需要客户端和服务端建立Socket连接。客户端通过Socket将需要调用的接口名称、方法名称及参数序列化后传递给服务端。服务端反序列化后再利用反射调用对应的方法将结果返回给客户端。

本组最终实现的简单RPC架构如图所示通过本次课程大作业本组深入理解了 RPC 的核心概念和实现原理,掌握了使用 Java、Netty 和 ZooKeeper 构建简单 RPC 系统的方法。综上所述RPC 能够有效实现不同服务间的远程调用提高系统的可扩展性和服务重用性。同时Netty 的高性能和 ZooKeeper 的分布式协调能力为系统的性能和可靠性提供了有力保障。