鱼皮项目简易版 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方法同理

相关推荐
承渊政道5 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
严肃小白兔10 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化
Linux-lucky1 天前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
博客zhu虎康1 天前
实现局域网P2P通信:内网发送消息
网络·网络协议·p2p
吴声子夜歌1 天前
Kubernetes权威指南——网络原理(一)
网络·容器·kubernetes
陈希1231 天前
Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位
linux·服务器·网络
国科安芯1 天前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
|_⊙1 天前
网络层协议 IP
服务器·网络·tcp/ip
无言听风雨丶1 天前
Kubernetes Service Mesh 与 mTLS 实战:从网络可达走向零信任服务通信
网络·kubernetes·service_mesh