鱼皮项目简易版 RPC 框架开发(六)----最后的绝唱
本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记,如果有时间可以直接去看原文
1. 简易版 RPC 框架开发
前面的内容可以笔者的前面几篇笔记
鱼皮项目简易版 RPC 框架开发(一)
鱼皮项目简易版 RPC 框架开发(二)
鱼皮项目简易版 RPC 框架开发(三)
鱼皮项目简易版 RPC 框架开发(四)
鱼皮项目简易版 RPC 框架开发(五)
引用:
1. 简易版 RPC 框架开发
1. 简易版 RPC 框架开发
鱼皮项目简易版 RPC 框架开发(一)
鱼皮项目简易版 RPC 框架开发(二)
鱼皮项目简易版 RPC 框架开发(三)
鱼皮项目简易版 RPC 框架开发(四)
鱼皮项目简易版 RPC 框架开发(五)
RPC框架的简单理解
RpcClientExample类(RPC 客户端示例)
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 {// 如果只提供了端口号,构造完整URLtry {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输入信息完全无效
连接成功
获取代理对象
调用方法
将变量“张三”序列化(变成可以被计算机读取的对象)
绑定对象方法
字节对象和地址