精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Java>>JAVA编程>>网络编程>>RMI>>RMI规范--第三章(3)

主题:RMI规范--第三章(3)
发信人: daystream()
整理人: biubiu(2000-01-02 15:22:51), 站内信件
3.5 通过代理服务器透过防火墙的 RMI
RMI 传输层通常试图将直接套接字在Internet的主机上打开。然而,许多Intran
et
的防火墙不允许这样做。因此,缺省 RMI 传输提供两种基于 HTTP 的机制,可

使防火墙后的客户机调用驻留在防火墙外的远程对象方法。




3.5.1 如何将 RMI 调用包装在 HTTP 协议内 
要透过防火墙,传输层可在防火墙信任的 HTTP 协议范围内嵌入 RMI 调用。将

 RMI 调用数据作为 HTTP POST 请求的主体发送出去后,反馈信息将返回到 HTT
P
 响应主体内。传输层可通过以下两种方法构造 POST 请求:

 1.  如果防火墙代理服务器可以把 HTTP 请求定向到主机的任意端口,HTTP 
请求就会被直接转发到 RMI 服务器正在监听的端口上。目标计算机上的缺省 RM

传输层可通过能识别并解码 POST 请求内的 RMI 调用的服务器套接字进行监听。
 
 2.  如果防火墙代理服务器只能把 HTTP 请求定向到某个已知的 HTTP 端口,

该调用就会被转发到正在主机端口 80 上监听的 HTTP 服务器,而且将执行 CGI
 
脚本以转发对同一计算机上目标 RMI 服务器端口的调用。 


3.5.2 缺省套接字工厂 
RMI 传输扩展 java.rmi.server.RMISocketFactory 类以提供作为客户机和服
务器套接字源提供者的套接字工厂的缺省实现。该缺省套接字工厂可创建套接字

以透明地提供防火墙通道机制,如下所示:

客户机套接字将自动尝试与无法用直接套接字联系的主机进行 HTTP 连接。 
服务器套接字将自动检测新近接收的连接是否 HTTP POST 请求,如果是,则只

将请求主体送给传输层,同时将其输出格式转化为 HTTP 响应。 
工厂的 java.rmi.server.RMISocketFactory.createSocket 方法将提供带有
此缺省行为的客户机端套接字。工厂的 java.rmi.server.RMISocketFactory.cr
eateServerSocket
 方法将提供带有此缺省行为的服务器端套接字。




3.5.3 配置客户机 
无需特别配置即可使客户机透过防火墙发送 RMI 调用。

但如果将 java.rmi.server.disableHttp 属性的布尔值设置为“true”,客
户机即可禁止将 RMI 调用包装为 HTTP 请求。




3.5.4 配置服务器 

------------------------------------------------------------------

注意 - 主机名不应为主机的 IP 地址,因为某些防火墙代理服务器不传送这种

主机名。 


------------------------------------------------------------

 1.  服务器主机域外的客户机要想调用服务器远程对象的方法,则必须找到该

服务器。因此,服务器导出的远程引用必须包含服务器主机的全名。 
  本信息可否用于运行服务器的 Java 虚拟机,取决于服务器平台和网络环境。

如果不可用,则启动服务器时必须通过 java.rmi.server.hostname 属性指定主
机的全名。 
  例如,在 chatsubo.javasoft.com 上可用以下命令启动 RMI 服务器类 
ServerImpl: 

   java -Djava.rmi.server.hostname=chatsubo.javasoft.com ServerImpl


 2.  如果服务器不支持防火墙后可传送到随意端口的 RMI 客户机,则可使用
如下配置: 
 a.  HTTP 服务器在端口 80 上监听。  
 b.  CGI 脚本的位置为别名 URL 路径  

/cgi-bin/java-rmi.cgi

该脚本: 
 -  调用本地 Java 解释程序以执行可将请求传送到适当 RMI 服务器端口的传

输层内部类。 
 -  在 Java 虚拟机中,以与 CGI 1.0 环境变量相同的名称和值定义属性。 
  用于 Solaris 和 Windows 32 操作系统的 RMI 分布式版本中提供了示例脚
本。注意,脚本必须指定服务器上 Java 解释程序的完整路径。 




3.5.5 性能问题与局限 
在不考虑代理服务器传送延迟的情况下,由 HTTP 请求传送调用至少要比通过直

接套接字传送慢一个数量级。

因为透过防火墙只能在一个方向初始化 HTTP 请求,同时防火墙外的主机也无法

回调客户机的方法调用,所以客户机无法将其自身的远程对象导到防火墙以外。



--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.191.124]

[关闭][返回]