鱼皮项目简易版 RPC 框架开发(六)----最后的绝唱

本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记,如果有时间可以直接去看原文

1. 简易版 RPC 框架开发

前面的内容可以笔者的前面几篇笔记

鱼皮项目简易版 RPC 框架开发(一)

鱼皮项目简易版 RPC 框架开发(二)

鱼皮项目简易版 RPC 框架开发(三)

鱼皮项目简易版 RPC 框架开发(四)

鱼皮项目简易版 RPC 框架开发(五)

引用:

  1. 简易版 RPC 框架开发

1. 简易版 RPC 框架开发

鱼皮项目简易版 RPC 框架开发(一)

鱼皮项目简易版 RPC 框架开发(二)

鱼皮项目简易版 RPC 框架开发(三)

鱼皮项目简易版 RPC 框架开发(四)

鱼皮项目简易版 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结果对象

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

add方法同理

相关推荐
非凡ghost3 分钟前
Audacity(免费开源跨平台音频软件)中文绿色版
网络·网络协议·音视频·软件需求
测试人社区—小叶子7 分钟前
移动开发新宠:用Flutter 4.0快速构建跨平台应用
运维·网络·人工智能·测试工具·flutter·自动化
郭涤生15 分钟前
大白话Proactor模式
linux·网络·c++
乾元25 分钟前
Syslog / Flow / Telemetry 的 AI 聚合与异常检测实战(可观测性)
运维·网络·人工智能·网络协议·华为·自动化·ansible
蒸蒸yyyyzwd27 分钟前
Linux网络编程-udp
linux·网络·udp
黑客思维者29 分钟前
XGW-9000系列高端新能源电站边缘网关硬件架构设计
网络·架构·硬件架构·嵌入式·新能源·计算机硬件·电站
liebe1*136 分钟前
第八章 防火墙高可靠性技术
运维·服务器·网络
Stanford_sun1 小时前
基于Zigbee的无线火灾报警系统(云平台版)
网络·嵌入式硬件·物联网·zigbee
U-Mail邮件系统1 小时前
如何挑选优质可靠的邮件系统供应商
网络·邮件系统
测试人社区-小明1 小时前
从前端体验到后端架构:Airbnb全栈SDET面试深度解析
前端·网络·人工智能·面试·职场和发展·架构·自动化