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{}
}
复制代码
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();
}
复制代码
先看图 :
看看方法调用是如何发生的 :借鉴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(); }
}
复制代码
相关文章推荐
- Python常用机器学习扩展包
- ZH奶酪:Python中range和xrange的区别
- Nim连接到Python
- Google's Python Class(一)——Python 介绍
- Python开发入门与实战9-基于vs的集成开发环境
- python 搭建环境
- Python使用QRCode模块生成二维码
- Python的Django框架中的Context使用
- [2015-07-15] python002
- [2015-07-14] python001
- python错误集锦
- python之LIST基础操作
- 在Python的Django框架中为代码添加注释的方法
- 在Python的Django框架中加载模版的方法
- Python的Django框架中的Context使用
- 走进Python世界(一)入门介绍
- 走进Python世界(二)搭建Python环境
- Python源码剖析笔记4-内建数据类型
- [MEMO] Python argument passing
- Python基础:28正则表达式