自定义RPC(完美实现两台机器之间调用服务)

本文详细介绍了如何实现自定义RPC框架,包括服务端接口的定义与实现,服务端注册中心的接口及其实现,客户端的构建,以及测试类中服务端注册中心的启动和客户端调用服务的执行结果。
摘要由CSDN通过智能技术生成

自定义rpc

一、服务端暴露的接口

package remote.procedure.call.server;

public interface HelloService {
   
	public String sayHi(String name) ;//hi name
}

二、服务端功能接口实现类

package remote.procedure.call.server;
//实现类
public class HelloServiceImpl implements HelloService {
   

	@Override
	public String sayHi(String name) {
   
		System.out.println("你是傻逼!!!!!"+name);
		return "hi,"+name ;
	}

}


三、 服务端注册中心

(一)接口

package remote.procedure.call.server;

//服务中心
public interface Server {
   
	public void start() ;
	public void stop();
	//注册服务
	public void register(Class service,Class serviceImpl);
	//..
}

(二)实现类

	input.close();
			} catch (Exception e) {
   
				e.printStackTrace();
			}
		}
			
		}
		
	}
	
	
	
	

}

四、客户端

package remote.procedure.call.client;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Client {
   
	//获取代表服务端接口的动�?�代理对象(HelloService�?
	//serviceInterface:请求的接口名
	//addr:待请求服务端的ip:端口
	@SuppressWarnings("unchecked")
	public static <T> T getRemoteProxyObj(Class serviceInterface,
											InetSocketAddress addr) {
   
		//newProxyInstance(a,b,c)
		/*
		 * a:类加载器 �?  �?要代理哪个类(例如HelloService接口),
		 * 就需要将HelloService的类加载�? 传入第一个参�?
		 * b:�?要代理的对象,具备哪些方�?  --接口  
		 * 单继承,多实�?  A implements B接口,c接口
		 * String str = new String();
		 * String[] str = new String[]{"aaa","bb","cc"} ;
		 */
		return  (T)Proxy.newProxyInstance(serviceInterface.getClassLoader(),
				new Class<?>[] {
   serviceInterface} , new InvocationHandler() {
   
			
			//proxy:代理的对�?, method:哪个方法(sayHello(参数列表)�?, args:参数列表
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) 
								
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值