当前位置: 首页 > news >正文

鱼皮项目简易版 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输入信息完全无效

 

 

 连接成功

 获取代理对象

 

调用方法 

将变量“张三”序列化(变成可以被计算机读取的对象)

绑定对象方法

 

 字节对象和地址

 

HTTP结果对象

 反序列化对返回的数据解读

add方法同理

 

http://www.dtcms.com/a/304001.html

相关文章:

  • Qt|槽函数耗时操作阻塞主界面问题
  • go标准库log模块学习笔记
  • spring cloud sentinel 动态规则配置
  • css3之三维变换详说
  • Windows系统ffmpeg.dll丢失怎么办?从错误分析到永久修复的完整流程
  • FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持
  • 处理订单过期但支付成功的系统设计:平衡用户体验与业务规则
  • 设计模式:中介者模式 Mediator
  • Oracle发布MCP Server,自然语言交互说“人话”
  • Kubernetes高级调度01
  • 设计模式十三:代理模式(Proxy Pattern)
  • pygame 模拟放飞气球
  • hive专题面试总结
  • Python 日期时间格式化与解析的瑞士军刀:`strftime()` 与 `strptime()`
  • 三、Linux用户与权限管理详解
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各种食物的类型检测识别(C#代码UI界面版)
  • 学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库
  • 小杰数据结构(one day)——心若安,便是晴天;心若乱,便是阴天。
  • 【数据可视化-75】北京密云区2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可视化(含完整数据、代码)
  • Prometheus + Grafana + Micrometer 监控方案详解
  • Java:为什么需要通配符捕获(wildcard capture)
  • HbuilderX开发小程序
  • 定制开发开源AI智能名片S2B2C商城小程序对流量重构与价值提升的作用研究
  • 使用git托管keil工程
  • React函数组件的“生活管家“——useEffect Hook详解
  • C++:stack与queue的使用
  • 40+个常用的Linux指令——下
  • 基于变频与移相混合控制(PFM+PSM)的全桥LLC谐振变换器仿真模型
  • 机械臂抓取的无模型碰撞检测代码
  • 仿函数+优先级队列priority_queue的模拟实现