本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记,如果有时间可以直接去看原文
前面的内容可以笔者的前面几篇笔记
引用:
- 简易版 RPC 框架开发
RpcClientExample类(RPC 客户端示例)
java
package com.yupi.yurpc.example;
import com.yupi.yurpc.proxy.ServiceProxyFactory;
import java.util.Scanner;
/**
* RPC 客户端示例
*/
public class RpcClientExample {
public static void main(String[] args) {
// 配置服务器地址
configureServerUrl(args);
System.out.println("连接到RPC服务器: " + System.getProperty("rpc.server.url", "http://localhost:8080"));
System.out.println("开始RPC调用测试...");
// 获取代理对象
UserService userService = ServiceProxyFactory.getProxy(UserService.class);
try {
// 调用方法
System.out.println("\n 测试 getUser 方法:");
String result1 = userService.getUser("张三");
System.out.println(" getUser result: " + result1);
System.out.println("\n 测试 add 方法:");
int result2 = userService.add(7, 2);
System.out.println(" add result: " + result2);
System.out.println("\n 所有测试通过!");
} catch (Exception e) {
System.err.println(" RPC调用失败: " + e.getMessage());
System.err.println(" 请确保服务器已启动并且地址正确");
}
}
/**
* 配置服务器地址
*/
private static void configureServerUrl(String[] args) {
String defaultUrl = "http://localhost:8080";
// 从命令行参数获取服务器地址
if (args.length > 0) {
String url = args[0];
if (url.startsWith("http://") || url.startsWith("https://")) {
System.setProperty("rpc.server.url", url);
return;
} else {
// 如果只提供了端口号,构造完整URL
try {
int port = Integer.parseInt(url);
System.setProperty("rpc.server.url", "http://localhost:" + port);
return;
} catch (NumberFormatException e) {
System.err.println(" 无效的服务器地址: " + url);
}
}
}
// 交互式配置
Scanner scanner = new Scanner(System.in);
System.out.print("🔧 请输入服务器地址 (默认 " + defaultUrl + "): ");
String input = scanner.nextLine().trim();
if (!input.isEmpty()) {
if (input.startsWith("http://") || input.startsWith("https://")) {
System.setProperty("rpc.server.url", input);
} else {
try {
int port = Integer.parseInt(input);
System.setProperty("rpc.server.url", "http://localhost:" + port);
} catch (NumberFormatException e) {
System.err.println(" 无效的地址,使用默认地址: " + defaultUrl);
System.setProperty("rpc.server.url", defaultUrl);
}
}
} else {
System.setProperty("rpc.server.url", defaultUrl);
}
}
}
配置服务器地址
报错不在范围,无关紧要

读取默认的地址

从命令行参数获取服务器地址:命令行没有使用,所以会跳过

直接输入端口号


判断是否带有HTTP/HTTPS

如果带了


如果没有带但有端口
无效地址
1端口无效
2输入信息完全无效

连接成功

获取代理对象


调用方法
将变量"张三"序列化(变成可以被计算机读取的对象)

绑定对象方法
字节对象和地址


HTTP结果对象
反序列化对返回的数据解读
