RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用。
注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。
同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”,而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。
RMI 框架的基本原理大概如下图,应用了代理模式来封装了本地存根与真实的远程对象进行通信的细节。
下面给出一个简单的RMI 应用,其中类图如下:其中IService接口用于声明服务器端必须提供的服务(即service()方法),ServiceImpl类是具体的服务实现类,而Server类是最终负责注册服务器远程对象,以便在服务器端存在骨架代理对象来对客户端的请求提供处理和响应。
各个类的源代码如下:
import java.rmi.Remote; import java.rmi.RemoteException; public interface IService extends Remote { // 声明服务器端必须提供的服务 public String service(String content) throws RemoteException; } import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; //UnicastRemoteObject用于导出的远程对象和获得与该远程对象通信的存根。 public class ServiceImpl extends UnicastRemoteObject implements IService { private String name; protected ServiceImpl(String name) throws RemoteException { this.name = name; } @Override public String service(String content) throws RemoteException { System.out.println(content + " --------- 我被客户端调用了 ---------"); return "server------>" + content; } } import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; public class Server { public static void main(String[] args) { try { // 实例化实现了IService接口的远程服务ServiceImpl对象 IService service01 = new ServiceImpl("service01"); // 初始化命名空间 Context ct = new InitialContext(); LocateRegistry.createRegistry(8888); // 将名称绑定到对象,即向命名空间注册已经实例化的远程服务对象 ct.rebind("rmi://127.0.0.1:8888/service01", service01); System.out.println(">>>>>INFO:远程service对象绑定成功!>>>>>"); } catch (RemoteException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } } } import javax.naming.Context; import javax.naming.InitialContext; public class Client { public static void main(String[] args) { String url = "rmi://localhost:8888/"; try { Context ct = new InitialContext(); // 检索指定的对象 即找到服务器端相对应的服务对象存根 IService service = (IService) ct.lookup(url + "service01"); System.out.println(service + " is :" + service.getClass().getName() + " instance"); Class<?>[] sInterfaces = service.getClass().getInterfaces(); for (Class<?> clazz : sInterfaces) { System.out.println(" interface is " + clazz.getName()); } String str = service.service("你好"); System.out.println(str); } catch (Exception e) { e.printStackTrace(); } } }
其实整个简单的RMI 应用中各个类的交互时序如下图:
推荐一篇更完善的文章:http://ryxxlong.iteye.com/blog/1560535
相关推荐
初识分布式架构与意义 如何把应用从单机扩展到分布式 大型分布式架构演进过程 分布式架构设计 主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么...
第13章 在Java Servlet中利用 RMI 13. 1 RMI概述 13. 2 RMI的实现 13. 2. 1 定义远程接口 13. 2. 2 实现远程对象 13. 2. 3 将远程对象绑定到RMI的名称空间 13. 2. 4 作为客户对象的Servlet 13. 2. 5 运行RMI...
球类物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
交通信号灯检测系统源码分享
基站设备检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
人脸活体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
这款资源系统是一款基于PHP和MySQL开发的内容管理系统(CMS),广泛应用于资源分享、下载站点的搭建。该系统以简洁、高效、易用为特点,适合快速构建资源类网站。 核心功能 资源管理:支持多种资源类型(如软件、文档、视频等)的上传、分类、展示和下载。 用户系统:提供用户注册、登录、权限管理等功能,支持用户积分、等级制度。 SEO优化:内置SEO功能,支持自定义URL、关键词、描述等,提升搜索引擎排名。 模板管理:支持多套模板切换,用户可以根据需求自定义网站外观。 插件扩展:系统支持插件机制,用户可以通过安装插件扩展功能,如支付接口、社交分享等。 安全机制:内置防SQL注入、XSS攻击等安全机制,保障系统安全。 适用场景: 资源下载站 软件分享平台 文档分享站点 视频资源站
内容: 本研究探讨了巴西北部一个红树林边缘河口中的溶解有机物(DOM)动态,将DOM组成与其形成地点的氧化还原条件联系起来。通过结合分子分析与营养盐和微量元素数据,我们强调了难降解DOM的外流作为沿海碳储存的重要贡献者,并提出了一种新颖的分子指数(ISuP),用于区分复杂沿海生态系统中的DOM来源。该数据集包括由超高质量分辨率质谱(傅里叶变换离子回旋共振质谱仪,FT-ICR-MS)获得的溶解有机物的分子数据、从FT-ICR-MS数据计算出的分子指数(ISuP 和 ITerr),以及环境数据,包括溶解有机碳(DOC)、营养盐(硝酸盐和磷酸盐)和微量元素(铁、锰、钡)的数据。水样采集自巴西北部帕拉州布拉甘萨附近的一个红树林边缘河口。此研究对于理解沿海生态系统中碳循环及其在全球变化背景下所扮演的角色具有重要意义。"访问数据集" ()以获取更多详情。
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
火车车厢检测系统源码分享
智慧社区的建设背景与需求 智慧社区的建设源于“互联网+”时代的呼唤,是业主刚需促成的社区变革。随着市场化进程的加速,传统社区面临着运营业务少、建设成本高、维护难度大、业务不精、增值服务少、无数据沉淀、运营模式单一等问题。而新技术如大数据、云计算的崛起,为人与人、人与物、物与物之间的无界限连接提供了可能,推动了智慧社区的发展。业主对于智能家居、可视对讲、智能安防、社区消费、在线物业、社区互动等体验式社区的需求,也成为了购房的刚需。智慧社区的建设,旨在通过一站式服务提升楼盘品质及品牌溢价,简化物业系统,增强管理效率,降低建设及维护成本,为业主提供便捷、舒适的生活服务,并转型为服务提供商。 智慧社区的核心子系统与功能 智慧社区的建设依赖于多个核心子系统,包括视频监控、可视对讲、一卡通、背景音乐、信息发布等。视频监控子系统提供了全方位的安全保障,通过密码加密传输、数据库安全、云存储等技术,实现了录像的安全存储和智能分析,如全景监控、人员异常活动检测等功能。可视对讲子系统不仅实现了基本的对讲功能,还加入了人脸识别、远程开门、信息发布等智能化功能。一卡通子系统涵盖了门禁、考勤、消费、访客、梯控、巡更等多个应用场景,实现了统一数据库和身份认证体系下的便捷管理。此外,背景音乐子系统提供了定时广播、实时广播、事件联动等功能,而信息发布子系统则支持文字、图片、即时和任务播放,以及分组管理,为社区内的信息传播提供了便利。智慧社区还注重家居的智能化,通过情景模式预设、一键自动控制、系统传感器和逻辑功能自动运行等任务,以及兼容常规电器设备,为业主提供了舒适、健康、便利的居住环境。 智慧社区的运营方案与未来展望 智慧社区的运营方案包括开放的云平台、智能终端和丰富应用,旨在打造智慧社区行业生态圈。云平台的建设实现了海量信息存储、强大的计算能力,以及统一部署、统一服务、统一用户体验和降低成本的目标。交互客服平台的打造,通过公司门户网站、小区客服网站、业主个人中心等多渠道,建立了物业与业主之间的信任关系。智慧社区还提供了多方位的多媒体广告,搭建了用户与经营者之间的桥梁,增加了物业收入。同时,智慧社区还注重公私车位运营等增值业务,通过手机APP下单、确认租赁等方式,实现了车位的有效利用和物业收入的增加。未来,智慧社区将继续深化智能化建设,拓展更多应用场景,为业主提供更加便捷、舒适、智能的生活体验。
棒球运动物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
去年写的学生点名系统,使用c#的xaml做的动画,使用账密登录,支持背景图修改,读取姓名,点名倒计时,背景音乐,手动停止,速度调整等。
二维码与条形码检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
内容概要:文章主要介绍了利用决策树和朴素贝叶斯算法对鸢尾花进行分类的研究过程。文中首先概述了研究背景和意义,指出了鸢尾花数据集作为经典机器学习数据集的重要性,以及通过此数据集可以帮助理解和优化算法性能。研究内容涵盖了算法的基本原理、技术细节,如信息熵、信息增益及其比率,还包括对模型进行剪枝、性能评估等多项步骤。作者通过一系列实验证明,这两类方法能够在不同程度上有效地分辨三种不同品种的鸢尾花,并针对各自的优势与局限性给出了具体的分析与改进建议。 适用人群:适用于正在接触或学习机器学习入门级别的学生以及相关技术人员,尤其是那些希望加深对于分类算法尤其是决策树与朴素贝叶斯这两种经典算法了解的人群。 使用场景及目标:该研究旨在通过对鸢尾花数据集的实际操作,让学生或从业者掌握决策树和朴素贝叶斯在实际案例中的构建方法。同时培养他们对分类问题建模的兴趣和技能,提高他们在选择适当算法应对不同类型问题的能力。 其他说明:除了详细讲解两个核心主题外,文档还提及了一些关于数据处理(包括但不限于预处理和特征工程)、实验配置以及结果解读方面的基础知识。这对于初学者来说是非常有用的参考资料。值得注意的是,虽然文中强调决策树算法的优点,但也提到了诸如过拟合之类的潜在缺陷,并提出了相应的解决方案。总的来说,本文不仅有助于读者建立起对于两类主流分类算法的理解,也为未来的研究工作奠定了坚实的基础。
模拟军事目标检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
内容: 该研究探讨了三种典型水样中的溶解有机物(DOM)的独特色谱行为,这些水样分别代表了沿海DOM、海洋表面DOM和海洋难降解DOM。在RV Polarstern的ANT XXII/2航次期间(站位PS67/006-130,纬度-67.5633,经度-55.3448),使用采水器从威德尔海表面(30米深度,海洋表面DOM)和深水(1356米深度,难降解DOM)采集水样,并在其他地方有所描述(El Naggar等人,2007;Koch等人,2008)。实验过程中,将160升海水通过0.2微米滤芯过滤,酸化至pH 2,并泵入60毫升固相萃取柱(PPL,5克)。DOM用40毫升甲醇洗脱后,在-18°C下保存。沿海DOM通常从南北海(纬度54.1447,经度7.8711)提取,并作为实验室内部标准使用。海水经过0.2微米PTFE(Whatman)过滤,酸化至pH 2后,也采用PPL萃取柱进行处理。 数据集包含4组数据,详细信息可访问提供的链接获取。
5f3074e9b14c8a0069729d6464d15e35.PNG