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

相关推荐
森G1 小时前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
swordbob3 小时前
NIO 的 Channel 里有多个 BIO 吗?
linux·网络·nio
天天讯通3 小时前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别
leo_yu_yty5 小时前
Go语言分布式计算(RPC入门)
网络·网络协议·rpc
2401_868534785 小时前
2025下半年网络规划设计师真题(选择题、案例分析)
运维·服务器·网络
TechWayfarer6 小时前
查IP归属地接入实战:保险理赔如何做动态风险监控与预警
网络·python·tcp/ip·安全·flask
GlobalSign数字证书6 小时前
SSL证书过期致业务宕机?企业证书管理三大痛点与自动化方案
网络协议·自动化·ssl
米丘6 小时前
SSE (server-sent events)
javascript·网络协议
Resurgence_zc6 小时前
openGauss 资源池化主备页面交互流程梳理
网络·交互·数据库开发
Dlrb12116 小时前
Linux网络编程-网络基础概念(IP, UDP协议)
linux·服务器·网络·网络基础·端口号·ip协议·udp协议