请问 RMISocketFactory 的含义和RMI的理解

etl2007 2008-04-20 06:11:45

例如 我门实际的业务类 可能是这样的
public interface bussinessInter extends Remote

public class bussinessClass extends UnicastRemoteObject implements
bussinessInter

将 bussinessClass 注册到一台服务器机器上,假设用默认端口

然后 客户端在调用 bussinessInter 的方法的时候,
RMI服务器又会使用一个端口和客户端 通讯

我的意思是

bussinessClass 注册时用了一个端口。这个我们称这个 为 通讯端口,或查找端口,因为命名服务需要来查找它的
假设这个端口是10000


但是和客户端通讯时又用了一个端口。这是实际业务上用的端口,我们称之为数据端口
假设这个端口是10001

即客户端通过服务器上10000这个端口找到bussinessClass

但是调用bussinessClass 的方法并且获取相应数据是10001端口

而RMISocketFactory 就是来指定这个数据端口,如果不指定,这个端口就会随意分配,
因为有些主机并不是所有端口都开放,所以需要去指定

这个理解对吗?请大吓指教啊
...全文
267 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
云上飞翔 2008-04-20
  • 打赏
  • 举报
回复
答:大致正确。若你“需要去指定”,则:
1)从RMISocketFactory继承,重写你自己的createServerSocket(int port) 与createSocket(String host, int port)
2)用setSocketFactory(RMISocketFactory fac) 向RMI运行时 进行注册就行了。
说明:RMI的默认实现是当TCP连接直接连接时被“防火墙”封锁时,可自动用HTTP协议尝试进行访问。
所谓的从注册服务器中找到“bussinessClass ”,其实返回的是一个实现该远程接口bussinessClass 的一个代理类而已。当客户调用“远程方法”时,该代理类的对象自动通过网络向“远程服务对象”传递该“远程方法调用”。通常默认实现是由一个“远程服务对象代理”在一个端口号上监听(这是由程序用:exportObject(..)时产生),并将请求转发到真正的“远程对象”上。

以上仅供你参考
goodmrning 2008-04-20
  • 打赏
  • 举报
回复
帮顶下

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧