基于Socket手写实现RPC远程通信

本文介绍了RPC的基本概念,详细讲解了如何使用Java实现基于Socket的RPC远程通信,包括创建rpc_server模块,编写api接口和provider,实现客户端代码,并启动测试。虽然例子中采用的是短连接,但提到了常见的RPC框架如dubbo、grpc等,这些框架通过长连接简化了远程调用的复杂性。
摘要由CSDN通过智能技术生成

什么是RPC

RPC(Remote Procedure Call)远程过程调用,简单来说是一个服务请求另一个服务提供的数据。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

大概的流程图
在这里插入图片描述

代码实现

1. 新建rpc_server模块,在server模块下面创建server_api和server_provider

api提供一些公共的方法,provider主要是服务端的一些处理逻辑
在这里插入图片描述

2. 编写api模块

添加一个公共方法接口和一个RPC请求参数对象

package com.xjp.rpc;

/**
 * @Description
 * @Author XJP
 * @Date 2020-04-24 21:53
 */
public interface IHelloServer {
   

    String sayHello(String s);

}

package com.xjp.rpc;

import java.io.Serializable;
import java.util.Arrays;

/**
 * @Description
 * @Author XJP
 * @Date 2020-04-25 9:29
 */
public class RpcRequest implements Serializable {
   

    private String className;
    private String methodName;
    private Object[] parameters;
    private Class[] types;

	//添加get和set,toString方法
}
4. 编写provider

1. 实现IHelloServer接口

加入api的pom依赖

		<dependency>
            <groupId>org.example</groupId>
            <artifactId>rpc_server_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
package com.xjp.impl;

import com.xjp.rpc.IHelloServer;

/**
 * @Description
 * @Author XJP
 * @Date 2020-04-24 21:55
 */
public class HelloServerImpl implements IHelloServer {
   
    @Override
    public String sayHello(String s) {
   
        System.out.println("Rpc Start");
        return "hello: " + s;
    }
}

2. rpc服务端代理

创建RpcProxyServer 类,通过一个线程池,通过线程池异步处理请求

package com.xjp;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Description
 * @Author XJP
 * @Date 2020-04-25 9:05
 */
public class RpcProxyServer {
   

    public void publisher(Object service, int port)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值