`

代理模式Remote Proxies(三、RMI)

 
阅读更多

因为我本科毕业设计中大量采用RMI实现分布式,且使用了Eclipse中用于开发RMI的插件,这里主要阐述以下几点:

一、注意;

二、代码;

三、如何手工编写RMI应用。

 

一、注意

1)RMI产生stub的改进

P128. Earlier versions of the JDK constructed separate (stub) files for use on the client and server machines. As of 1.2, the RMI compiler("rmic" command) creates a single stub file that both the client and server machines need.

 

2)RMI的好处——远程代理的好处

P131 The benefit of RMI is that it lets client programs("ShowRocket Client") interact with a local object("RocketImpl_Stub") that is a proxy for a remote object("RocketImpl")!!!

“本地的代理”代理了“远程真正实现服务的对象”

 

二、代码

接口Rocket.java

 

package com.oozinoz.remote;

import java.rmi.*;

public interface Rocket extends Remote {
    void boost(double factor) throws RemoteException;
    double getApogee() throws RemoteException;
    double getPrice() throws RemoteException;
}

 

接口实现RocketImpl.java

package com.oozinoz.remote;

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class RocketImpl extends UnicastRemoteObject implements Rocket {
    protected double price;
    protected double apogee;

    public RocketImpl(double price, double apogee) throws RemoteException {
        this.price = price;
        this.apogee = apogee;
    }

    public void boost(double factor) {
        apogee *= factor;
    }

    public double getApogee() throws RemoteException {
        return apogee;
    }

    public double getPrice() throws RemoteException {
        return price;
    }
}

 

在网络上某个节点注册一个对象RegisterRocket.java

package com.oozinoz.remote;

import java.rmi.*;

public class RegisterRocket {

    public static void main(String[] args) {
        try {
            Rocket biggie = new RocketImpl(29.95, 820);
            Naming.rebind("rmi://localhost:5000/Biggie", biggie);
            System.out.println("Registered biggie");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 在网络上另一个节点查询这个对象ShowRocketClient.java

package com.oozinoz.remote;

import java.rmi.*;

public class ShowRocketClient {

    public static void main(String[] args) {
        try {
            Object obj = Naming.lookup("rmi://localhost:5000/Biggie");
            Rocket biggie = (Rocket) obj;
            System.out.println("Apogee is " + biggie.getApogee());
        } catch (Exception e) {
            System.out.println("Exception while looking up a rocket:");
            e.printStackTrace();
        }
    }
}

  

三、手工编写RMI应用

1、编译

rmi>dir
Rocket.java
RocketImpl.java
RegisterRocket.java
ShowRocketClient.java

rmi>javac -d . *.java --> 编译java文件,指定存放生成类文件的位置
rmi>dir
Rocket.java
RocketImpl.java
RegisterRocket.java
ShowRocketClient.java
com\oozinoz\remote
Rocket.class
RocketImpl.class
RegisterRocket.class
ShowRocketClient.class

 

2、生成Stub,这个Stub在客户端和服务器端都要使用

rmi>rmic com.oozinoz.remote.RocketImpl
--> 为RocketImpl生成Stub,这个Stub需要被放到客户端和服务器两端
rmi>dir
Rocket.java
RocketImpl.java
RegisterRocket.java
ShowRocketClient.java
com\oozinoz\remote
Rocket.class
RocketImpl.class
RegisterRocket.class
ShowRocketClient.class
RocketImpl_Stub.class

 

3、运行效果

  • 大小: 268.4 KB
分享到:
评论

相关推荐

    代理模式Image Proxies(一、最朴素实现)

    以上就是代理模式的三种基本实现方式。在实际项目中,我们可以根据需求选择合适的实现方法,以增加代码的灵活性和可扩展性。例如,动态代理在处理多个具有相同接口的对象时特别有用,因为不需要为每个对象创建一个新...

    代理模式Image Proxies(二、最朴素实现)

    在这个名为“代理模式Image Proxies”的主题中,我们将探讨如何通过最朴素的方式来实现图像加载的代理。这个话题主要涉及到两个Java类:`LoadingImageIcon.java`和`ShowLoader.java`。 `LoadingImageIcon.java`可能...

    rmi.rar_rmi

    在Java RMI的现代版本中,Skeleton已不再必要,大部分功能由动态代理(Dynamic Proxies)实现,简化了RMI的使用。 4. **注册表(Registry)**:RMI注册表是服务发现的关键组件。它是一个简单的命名服务,用于存储...

    Smart Proxies and Interceptors in RMI-开源

    在Java的远程方法调用(Remote Method Invocation, RMI)技术中,智能代理(Smart Proxies)和拦截器(Interceptors)是两个重要的概念,它们为分布式系统提供了增强的功能和控制。本文将深入探讨这两个概念及其在...

    proxies_chi.zip

    标题"proxies_chi.zip"和描述中提到的内容是关于创建一个代理IP池的Python项目,这个项目能够自动从网络上抓取IP地址,检查它们的可用性,并将这些信息存储到数据库中,以便后续使用。这涉及到网络爬虫、IP验证、...

    Laravel开发-laravel-valid-proxies

    在Laravel框架中,"laravel-valid-proxies"通常指的...在实际开发中,正确配置和使用`laravel-valid-proxies`可以帮助开发者解决因代理而产生的各种问题,如防止恶意请求,以及在多层代理环境中正确识别客户端IP地址。

    koa-proxies:koa@2.x代理中间件

    $ npm install koa-proxies --save 选件 http-proxy活动 options . events = { error ( err , req , res ) { } , proxyReq ( proxyReq , req , res ) { } , proxyRes ( proxyRes , req , res ) { } } 日志选项 //...

    python中requests使用代理proxies方法介绍

    如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求: import requests proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get(...

    c#动态代理

    代理模式是一种结构型设计模式,它为一个对象提供一个替身或占位符,以便控制对这个对象的访问。在C#中,动态代理是基于接口实现的,也就是说,代理对象需要实现与目标对象相同的接口,这样它们就可以被看作是同一种...

    Python库 | proxies_l-0.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:proxies_l-0.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python3爬取快代理免费代理ip并多线程验证

    - 打开文件:`with open('proxies.txt', 'w') as f`,'w'表示写入模式。 - 写入数据:`f.write(ip + '\n')`,每行写入一个IP。 综上所述,这个项目涵盖了Python的网络请求、HTML解析、代理设置、多线程和数据存储...

    Java Networking and Proxies Code

    在Java编程领域,网络通信和代理(Proxies)是重要的组成部分,特别是在开发需要跨网络进行数据交换的应用时。本文将详细解析"Java Networking and Proxies Code"这一主题,包括如何启动一个线程来检查URL是否通过...

    Delphi_Proxy_Scraper.zip_Proxies

    标题中的"Delphi_Proxy_Scraper.zip_Proxies"暗示了这是一个使用Delphi编程语言编写的代理服务器抓取程序。Delphi是一种基于Object Pascal的集成开发环境(IDE),常用于创建桌面应用程序。在这个项目中,开发者可能...

    Laravel开发-laravel-valid-proxies .zip.zip

    在本文中,我们将深入探讨Laravel框架中的代理验证(laravel-valid-proxies)这一主题。Laravel是一个流行的PHP框架,它提供了丰富的功能和工具,帮助开发者构建高效、优雅的Web应用。`laravel-valid-proxies`是...

    scrapy-rotating-proxies:与Scrapy一起使用多个代理

    安装pip install scrapy-rotating-proxies用法将带有代理列表的ROTATING_PROXY_LIST选项添加到settings.py: ROTATING_PROXY_LIST = [ 'proxy1.com:8000', 'proxy2.com:8031', # ...]或者,您可以指定一个ROTATING_...

    Proxy is a high performance HTTPS proxies SOCKS5 proxiesWEB.zip

    描述 "Proxy is a high performance HTTPS proxies SOCKS5 proxiesWEB" 进一步确认了这个文件的内容,它强调了这些代理服务的高性能特性,涵盖了HTTPS、SOCKS5和WEB这三种常见的代理协议。 1. **HTTPS代理**:HTTPS...

    PyPI 官网下载 | scrapy-scylla-proxies-0.1.4.1.tar.gz

    Scrapy-Scylla-Proxies 是一个 Python 库,专门用于Scrapy爬虫框架,它提供了高效且稳定的代理服务器管理功能。这个库的版本是0.1.4.1,可以在Python的包索引(PyPI)官网上找到并下载。在Python的开发中,PyPI是一...

    ip代理采集和本地切换ip代理上网

    3. **编程语言设置**:在开发过程中,如果使用Python的`requests`库,可以通过设置`proxies`参数来指定代理;对于Java,可以使用`System.setProperty()`方法来设置代理。 4. **路由器配置**:对于整个局域网的代理...

    Python实现 windows 下代理IP的自动切换

    1. **获取代理IP**:通常需要从第三方API或代理IP池中获取可用的代理IP。这些API会返回HTTP或SOCKS类型的代理,如HTTP代理格式为`http://ip:port`,SOCKS5代理为`socks5://ip:port`。例如,可以使用`requests`库获取...

Global site tag (gtag.js) - Google Analytics