Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1562103
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:24:03

一起学习
作 为 一 种 优 秀 的 计 算 平 台,Java 在 许 多 方 面 具 有 其 突 出 的 优 越 性。 其 中,RMI 最 典 型 地 展 现 了Java 平 台 强 大 的 分 布 计 算 能 力。 本 文 用 一 个 简 单 的 例 子 说 明RMI 给 分 布 计 算 带 来 的 方 便, 以 及RMI 对 很 多 应 用 领 域 的 重 要 意 义, 如 桌 面 超 级 计 算 的 可 能 性。 ---- 简 言 之,RMI 是 一 种Java 虚 拟 机 之 间 对 象(Object) 互 相 调 用 对 方 函 数, 启 动 对 方 进 程 的 一 种 机 制, 用 这 种 机 制, 某 一 台Java 虚 拟 机 上 的 对 象 在 调 用 另 外 一 台Java 虚 拟 机 上 的 函 数 时, 使 用 的 程 序 语 法 规 则 和 在 本 台Java 虚 拟 机 上 对 象 间 的 函 数 调 用 的 语 法 规 则 一 样。 正 是 这 种 机 制 给 分 布 计 算 的 系 统 设 计, 编 程 都 带 来 了 极 大 的 方 便。 只 要 按 照RMI 规 程 设 计 程 序, 你 可 以 不 必 再 过 问 在 RMI 之 下 的 网 络 细 节 了, 如TCP/IP,Socket 等 等, 更 不 必 担 心 其 下 面 的 软 硬 件 环 境。 任 意 两 台Java 虚 拟 机 之 间 的 通 讯 完 全 由Java 虚 拟 机 自 己 的RMI 来 负 责。 对 程 序 员 来 讲, 这 两 台Java 虚 拟 机 之 间 完 全 是 透 明 的, 远 在 天 边 的Java 虚 拟 机 上 的 对 象, 使 用 起 来 就 象 近 在 眼 前 一 样。 ---- 范 例 ---- 下 面 的 例 子 是 利 用RMI 设 计 的 一 个 简 单 的 网 络 计 算 器, 其 功 能 是 一 个 三 阶 多 项 式 的 求 值, 然 后 画 出 轨 迹。 读 者 如 没 有 时 间, 在 阅 读 时 暂 时 不 必 细 究 其 语 法 细 节, 特 别 是 有 些 用IBM 的VisualAge for Java 自 动 生 成 的 用 户 界 面 代 码, 但 从 该 例 子 的 程 序 结 构 中, 你 可 足 以 了 解RMI 简 明 的 风 格。 另 外, 本 文 主 要 从 应 用 的 角 度 讨 论RMI, 省 去 了 对 其 原 理 的 分 析, 感 兴 趣 的 读 者 可 直 接 访 问 ---- 设 计 计 算 器 有 多 种 方 法, 从 结 构 上 看, 归 纳 起 来, 大 致 有 三 种。 ---- 1、 本 地 机 ---- 在 本 机 上 输 入 参 数, 计 算 在 本 机 上 完 成, 结 果 由 本 机 显 示 给 用户。 ---- 2、 本 地 机-TCP/IP- 远 程 机 ---- 在 本 地 机 上 输 入 参 数, 本 地 机 将 参 数 通 过 网 络 送 给 远 程 机, 远 程 机 启 动 一 个 进 程 计 算 出 结 果, 然 后 远 程 机 将 结 果 通 过 网 络(Socket, HTTP 等 等) 送 给 本 地 机, 结 果 由 本 地 机 显 示 给 用 户。 ---- 3、 本 地 机-RMI-TCP/IP-RMI- 远 程 机 ---- 本 地 机 从 远 程 机 上 得 到 一 个 小 程 序(Applet) 用 作 数 据 输 入( 多 项 式 系 数) 和 结 果 显 示, 在 本 地 机 上 输 入 的 数 据 将 作 为 调 用 远 程 机 上 函 数 的 参 数, 该 远 程 函 数 计 算 出 结 果, 反 过 来, 将 该 结 果 作 为 调 用 本 地 机 上 对 象( 如 刚 才 那 个Applet) 的 函 数( 如 屏 幕 刷 新) 的 参 数 调 用 该 本 地 函 数, 就 这 样, 计 算 结 果 自 然 地 被 送 回 来, 显 示 在 本 地 机 上。 ---- 显 然, 第3 种 方 案 是 最 灵 活、 最 优 雅 的 网 络 计 算 模 式。 下 面 的 程 序 正 是 基 于 这 种 模 式。 由 于 篇 幅 所 限, 程 序 没 有 过 多 考 虑 完 备 性, 如 对Exception 只 作 了 简 单 的 处 理, 但 该 程 序 用 于RMI 编 程 风 格 讲 解, 并 不 碍 大 局。 ---- ServerManager, ServerManagerListener 用 于 简 单 控 制RMIServer 的 启 动, 停 止, 退 出。 ---- RMIServer 设 计 成 一 个 简 单 的RMI 服 务 器, 其 中,RMIServer(String sMAPServerName) 完 成 服 务 器 的 命 名, 在1099 口 上 作 注 册 登 记 准 备。 ---- startRMI() 的Naming.rebind("/" sServerName,this) 将 启 动 该 服 务 器, 以sServerName 的 值 为 名 称, 也 就 是"RMIServer," 启 动 后,RMIServer 开 始 在1099 口 上 倾 听 来 自 网 络 的 呼 叫。 ---- stopRMI() 的Naming.unbind(sServerName) 用 于 停 止 该 服 务 器。 ---- calculateIT(double[] dA, ClientRemoteInterfacecrInterface) throws RemoteException 是 供 客 户 端Java 虚 拟 机 作 远 程 调 用 的 函 数,dA 是 多 项 式 系 数(a3,a2,a1,a0), 该 多 项 式 定 义 为 F(X)=a3*X3 a2*X2 a1X a0 ---- crInterface 是 客 户 端Java 虚 拟 机 远 程 调 用 服 务 器 端Java 虚 拟 机 时 作 为 参 数 送 过 来 的 代 表 客 户 端 的 远 程 接 口, 供 服 务 器 端 需 要 时 反 过 来 对 客 户 端 作 远 程 调 用 时 使 用。 ---- calculateIT 结 果 计 算 出 来 以 后, 服 务 器 端 很 轻 松 地 用 crInterface.drawIT(iXY); ---- 一 个 语 句 就 激 发 了 在 客 户 端 的drawIT(iXY) 函 数。 计 算 结 果iXY 作 为 函 数 参 数 自 动 地 传 送 到 客 户 端。 ---- 客 户 端Java 虚 拟 机 靠CalculatorDisplay 这 个Applet 激 发 服 务 器 端Java 虚 拟 机 上 的calculateIT 函 数, 浏 览 器( 如HotJava) 从 服 务 器 上 获 得CalculatorDisplay 以 后, 该Applet 的init() 函 数 里 有 两 条 关 键 的 语 句:


srInterface = (ServerRemoteInterface)  

Naming.lookup("//" getCodeBase()  

.getHost() "/" "RMIServer");  

UnicastRemoteObject.exportObject(this);  



---- 第 一 句 的 目 的 是 在 提 供 该Applet 的 服 务 器 上 寻 找 名 为RMIServer 的RMI 远 程 对 象。 找 到 以 后, 用srInterface 接 口 代 表; 第 二 句 是 所 谓 的 将 本 对 象 输 出 的 操 作, 这 样 才 可 以 将 本 对 象 的 远 程 接 口 作 为 远 程 函 数 调 用 的 参 数 传 送 到 服 务 器 端。 当 需 要 调 用( 或 启 动) 服 务 器 端 的calculateIT 函 数 时, 也 只 是 简 单 的 一 个 语 句 srInterface.calculateIT(dA,this); ---- Java 工 具 还 会 自 动 生 成CalculatorDisplay_Skel,CalculatorDisplay_Stub, RMIServer_Skel, RMIServer_Stub 文 件, 在 此 可 暂 不 理 会。P 和 本 文 没 有 什 么 关 系, 作 者 只 是 为 了 方 便, 用 它 来 把 简 单 信 息 显 示 到 屏 幕 上。 至 此, 相 信 读 者 已 经 看 出RMI 的 功 能 和 简 明 性 了。 ---- 前 景 ---- 虽 然 本 文 描 述 的 只 是 一 个 小 小 的 多 项 式 求 值, 轨 迹 输 出 例 子, 但 不 难 想 象, 计 算 对 象 可 以 是 高 阶 微 分 方 程, 高 阶 矩 阵 运 算, 客 户 机 可 以 是 普 通 的PC 机, 服 务 器 可 以 是 超 级 计 算 机, 在 其 上 可 进 行 诸 如 流 体 力 学 模 型 仿 真, 风 洞 模 拟 试 验, 实 时 图 像 处 理, 气 象 分 析, 股 市 预 测, 人 工 智 能, 大 型 数 据 库 访 问 等 等。 而PC 机 用 于 调 节 参 数, 控 制 进 程, 观 测 结 果 等 等, 其 效 果 如 同 置 身 于 超 级 计 算 机 上 直 接 运 行 程 序 一 样, 尽 管 它 实 际 上 离 你 十 万 八 千 里。 ---- 从 商 业 上 看, 超 级 计 算 机 可 以 向 更 多 的 用 户 提 供 商 业 服 务, 例 如 收 费 向 远 程 用 户 提 供 模 拟 试 验, 而 普 通PC 用 户, 既 能 享 受PC 的 廉 价 方 便, 又 有 可 能 享 受 到 原 来 不 可 想 象 的 超 级 计 算 的 威 力, 因 为Java RMI 可 以 轻 松 自 如 地 将 超 级 计 算 延 伸 到 你 的 桌 面 上。 下载本文示例代码


java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!java的RMI剖析!
阅读(118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~