您的位置:首页 > 编程语言 > Python开发

Python 实现RMI

2015-07-16 09:50 633 查看
什么是RMI :远程方法调用,通过对象序列化,代理模式,在本地调用远程的方法或者和函数的方式,在JAVA或Python 中都有其具体的解决方式。

先看图 :

看看方法调用是如何发生的 :借鉴Head First 设计模式中对RMI的实现方式。

基本的介绍也就这些了。

先看看使用JAVA 来制作远程服务

Step一: 制作远程接口

复制代码

1 import java.rmi.* ;

2

3 //扩展JAVA.RMI.REMOTE接口

4 public interface MyRemote extends Remote {

5 //远程调用一定会抛出异常,RemoteException

6 //确定变量和返回值是属于原语(primitive)类型或者可序列化

7 //String 是可序列化类型

8 public String sayHello() throws RemoteException;

9 }

复制代码

Step二: 制作远程实现,也就是说远程服务的实现

复制代码

//UnicastRemoteObject 帮助我们实现了某些功能

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{

public String sayHello(){

return “Server says ,’Hey!’”;

}

//必须声明的空的构造函数,意味这你的构造器正在调用不安全的代码

public MyRemoteImpl() throws RemoteException{}

public static void main(String[] args){
try{
MyRemote service = new MyRemoteImpl();
Naming.rebind("RemoteHello",service);

}catch(Exception ex){
ex.printStackTrace();
}

}


}

复制代码

Step三: 产生Stub 和 Skeleton

其中S tub 是对象是客户端必须找到的对象

Step四: Stub 在RMI服务器端进行注册 使用RMI Register 进行注册

Step五:启动 远程服务,也就是在一个线程中启动Remote Service。

这样服务器端的所有准备工作完成。

再来看看客户端的代码是如何实现。

Step一:客户端在Register中寻找stub代理的代码

Step二:Register返回该Stub的对象

Step三:客户端就像调用真正的Stub 对象一样调用该段代码

复制代码

client :

import java.rmi.*

public class MyRemoteClient(){

public void main(string[] args){

new MyRemoteClent.go();

}

public void go(){
MyRemote service=(MyRmote)Naming.lookup("rmi://127.0.0.1/RemoteHello");
service.sayHello();

}


}

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: