自己实现RMI(一)基本原理
2012-08-28 15:42
357 查看
RMI,即远程过程调用。在java中,利用RMI机制可以调用远程java虚拟机上面的对象,而且调用时跟调用本地对象一模一样。
虽然java类库里面有现成的RMI可以用,但是效率很低,基本上很难满足实际需要。至少,在一些要求快速调用远程对象的情况下,库里面的RMI基本上就是摆设。
参考RMI的基本原理,我自己实现了一套RMI方案。从原理上讲,实现过程是这样的:支持RMI的虚拟机上都运行着一个server线程,线程根据接收到的消息为其他虚拟机提供服务。当A虚拟机上对象a需要调用B虚拟机上的b对象时,对象a将调用参数序列化成字符串或者byte数组,然后通过A发送给虚拟机B,虚拟机B收到请求后反序列化得到参数,然后调用b相应的方法,最后将返回值序列化返回给虚拟机A上的对象a。
这整个过程,有三个关键的技术要点:
1.对象的查找或者索引,以及回调方法。
2.对象的序列化与反序列化。
3.底层socket通信
额外的技术要点:
1.序列号后数据压缩与解压
虽然java类库里面有现成的RMI可以用,但是效率很低,基本上很难满足实际需要。至少,在一些要求快速调用远程对象的情况下,库里面的RMI基本上就是摆设。
参考RMI的基本原理,我自己实现了一套RMI方案。从原理上讲,实现过程是这样的:支持RMI的虚拟机上都运行着一个server线程,线程根据接收到的消息为其他虚拟机提供服务。当A虚拟机上对象a需要调用B虚拟机上的b对象时,对象a将调用参数序列化成字符串或者byte数组,然后通过A发送给虚拟机B,虚拟机B收到请求后反序列化得到参数,然后调用b相应的方法,最后将返回值序列化返回给虚拟机A上的对象a。
这整个过程,有三个关键的技术要点:
1.对象的查找或者索引,以及回调方法。
2.对象的序列化与反序列化。
3.底层socket通信
额外的技术要点:
1.序列号后数据压缩与解压
相关文章推荐
- 自己实现RMI(四)socket通信方案之UDP通信
- java RMI一个例子以及模仿RMI的原理实现一个自己的RMI
- 自己实现RMI(五)socket通信方案之TCP通信
- 自己实现RMI(二)对象索引和方法回调
- 自己实现RMI(六)压缩与解压
- 自己实现RMI(三)对象序列化与反序列化
- 如何在CHtmlView中用OnNewWindow2事件生成自己的浏览器窗口,实现类似于多标签页浏览
- 【STL学习】自己动手C++编程实现hash table(散列表)
- 实现自己的“命令映射表”(上)
- C 实现一个函数打印乘法口诀表 行数和列数自己指定
- 实现自己的天气预报(源代码)
- 自己实现一些JQuery插件-----------------------------------(四)
- arcgis api for silverlight自己写个图层,实现对OpenStreetMap的访问
- C++11__自己实现的一个swap类
- 数据结构 24 哈希 key-value 存储于查找 自己实现
- 基于EasyNVR二次开发实现自己的摄像机IPC/NVR无插件化直播解决方案
- RMI 1.2 实现
- 自己实现一个最简单的数据库
- 自己简单实现的富文本控件RichWidget
- EnterpriseLibrary4 自己封装程序集实现log打印