工 作 原 理
---- 电 子 白 板 有 两 种 实 现 模 型, 一 种 是 无 白 板 服 务 器, 因 此 仅 支 持 两 个 用 户 直 接 连 结; 另 一 种 是 有 白 板 服 务 器, 原 则 上 不 限 制 同 时 上 线 人 数 和 交 谈 室 个 数, 具 体 实 现 上 可 视 服 务 器 性 能 和 需 要 而 定。 本 文 要 介 绍 属 于 后 者。
---- 当 用 户 需 用 白 板 与 他 人 交 流 时, 需 要 先 用 浏 览 器 连 到Applet 所 在 主 页,Applet 运 行 后 会 连 接 到 该 白 板 服 务 器, 和 服 务 器 建 立TCP 连 接。 每 个 用 户 可 以 在 自 己 的 白 板 上( 嵌 在Applet 画 面 中) 绘 制 图 形 和 输 入 文 字,Applet 会 将 这 些 信 息 通 过 已 建 立 的 网 络 连 接 发 往 白 板 服 务 器, 并 不 断 侦 听、 接 收 来 自 白 板 服 务 器 的 图 形 和 文 字 信 息, 将 其 再 现 在 用 户 的 白 板 中。 白 板 服 务 器 的 作 用 是 不 断 侦 听、 接 收 来 自 各Applet 的 信 息, 并 将 其 转 发 给 其 他 用 户。
---- 由 于 浏 览 器 对JAVA Applet 的 限 制, 使 得Applet 只 能 访 问 发 送 该Applet 的 宿 主 主 机, 因 此 只 能 在 该Applet 所 在 主 机 上 运 行 白 板 服 务 器, 使 得Applet 能 建 立 和 远 程 白 板 服 务 器 的 联 系。
功 能 设 计
---- 一 个 实 用 的 电 子 白 板 系 统 应 该 具 备 以 下 基 本 功 能:
用 户 在 浏 览 到 白 板 主 页 时, 需 登 录 后 才 能 进 行 交 流。 这 将 提 供 交 流 时 用 的 名 字, 必 要 时 还 可 做 权 限 检 查。
用 户 能 够 根 据 交 谈 室 的 交 谈 主 题 选 择 参 加 和 退 出 现 有 的 交 谈 室, 并 且 能 建 立 新 的 交 谈 室。 可 以 根 据 该 电 子 白 板 系 统 的 应 用 领 域 和 需 要 附 加 一 些 权 限 设 置。
用 户 只 能 和 在 同 一 交 谈 室 中 的 用 户 交 流。 一 个 交 谈 室 的 信 息 对 于 别 的 交 谈 室 是 不 可 见 的。
白 板 应 至 少 具 有 一 些 如 更 换 画 笔 颜 色、 清 除 画 板( 仅 影 响 自 己 的 白 板) 等 方 便 用 户 的 功 能。
白 板 应 具 有 一 个 操 作 提 示 和 操 作 信 息 反 馈 栏, 对 用 户 显 示 一 些 操 作 提 示 和 操 作 结 果 信 息, 这 样 可 以 方 便 用 户 使 用。
用 户 应 能 暂 停 和 恢 复 自 己 的 白 板 工 作。
---- 为 了 增 加 白 板 的 实 用 价 值, 可 以 考 虑 增 加 如 与windows 画 笔 工 具 类 似 的 画 正 方 形、 圆 形 等 类 似 功 能。 本 例 作 为 电 子 白 板 基 本 模 型 的 建 立, 故 没 有 加 入 这 些 功 能。 实 际 上, 只 要 了 解 了 下 面 要 介 绍 的 白 板 通 讯 协 议 集 的 设 计 原 则, 增 加 以 上 功 能 是 非 常 容 易 的。
通 讯 协 议 集 的 制 定
---- 由 于JAVA 内 置 的 标 准 基 础 通 讯 协 议 是TCP/IP, 所 以 我 们 只 需 在 其 基 础 上 建 立 电 子 白 板 的 应 用 层 协 议 集。 协 议 集 的 模 型 将 采 用 服 务 器/ 客 户 机 的 请 求/ 应 答 模 式。 可 以 根 据 需 要 实 现 的 白 板 功 能 制 定 通 讯 协 议 集, 协 议 集 中 包 括 登 录、 图 形 传 输( 分 服 务 器 发 出 和 客 户 机 发 出 两 部 分)、 文 字 传 输( 分 服 务 器 发 出 和 客 户 机 发 出 两 部 分)、 服 务 器 要 求 刷 新 交 谈 室 及 成 员 名 单、 客 户 机 要 求 刷 新 交 谈 室 及 成 员 名 单、 加 入 指 定 交 谈 室、 退 出 交 谈 室、 建 立 新 交 谈 室、 暂 停/ 恢 复 交 流 等 部 分。
---- 由 于 已 经 依 靠TCP/IP 协 议 保 证 数 据 传 输 的 正 确 性, 所 以 在 这 个 电 子 白 板 的 通 讯 协 议 集 的 设 计 中 应 在 保 证 功 能 的 前 提 下 尽 量 简 洁, 来 提 高 带 宽 利 用 率。 白 板 通 讯 协 议 集 的 细 节 可 参 考 如 下:
---- 注 意:(S) 表 示 该 部 分 由 服 务 器 发 出, 客 户 机 接 收;
---- (C) 表 示 该 部 分 由 客 户 机 发 出, 服 务 器 接 收;
---- 数 据 格 式 表 示: 引 号 之 间 表 示 字 符 串,(short) 表 示 短 整 形 数(2 字 节),(int) 表 示 标 准 整 形 数(4 字 节)。
登 录(C):"log" → 用 户 名 字 符 串。
图 形 传 输( 客 户 机 发 出)(C):"draw" →(int) 颜 色 值 →(short) 直 线 起 点 横 坐 标 →(short) 直 线 起 点 纵 坐 标 →(short) 直 线 终 点 横 坐 标 →(short) 直 线 终 点 纵 坐 标。
图 形 传 输( 服 务 器 发 出)(S):"draw" →(int) 颜 色 值 →(short) 直 线 起 点 横 坐 标 →(short) 直 线 起 点 纵 坐 标 →(short) 直 线 终 点 横 坐 标 →(short) 直 线 终 点 纵 坐 标。
文 字 传 输( 客 户 机 发 出)(C):"text" → 用 户 在 白 板 对 话 框 中 输 入 的 文 字 字 符 串。
文 字 传 输( 服 务 器 发 出)(S):"text" → 文 字 输 入 者 姓 名 字 符 串 → 该 用 户 输 入 的 文 字 字 符 串。
服 务 器 要 求 刷 新 交 谈 室 及 成 员 名 单(S):"refresh" → 交 谈 室1 主 题 字 符 串 → 交 谈 室1 中 的 用 户1 姓 名 字 符 串 → 交 谈 室1 中 的 用 户2 姓 名 字 符 串 →... →"complete" → 交 谈 室2 主 题 字 符 串 → 交 谈 室2 中 的 用 户1 姓 名 字 符 串 → 交 谈 室2 中 的 用 户2 姓 名 字 符 串 →... →"complete" →... → 最 后 一 个 交 谈 室 主 题 字 符 串 → 最 后 一 个 交 谈 室 中 的 用 户1 姓 名 字 符 串 → 最 后 一 个 交 谈 室 中 的 用 户2 姓 名 字 符 串 →... →"complete" →"ok"。
客 户 机 要 求 刷 新 交 谈 室 及 成 员 名 单(C):"refresh"。( 服 务 器 收 到 此 命 令, 会 执 行 前 面 的 服 务 器 要 求 刷 新 交 谈 室 及 成 员 名 单 子 协 议, 以 响 应 客 户 机 请 求)
加 入 指 定 交 谈 室(C):"join" → 申 请 加 入 的 交 谈 室 主 题 字 符 串。
退 出 交 谈 室(C):"quit"。
建 立 新 交 谈 室(C):"new" → 申 请 建 立 的 新 交 谈 室 主 题 字 符 串。( 服 务 器 收 到 此 命 令, 会 自 动 在 该 用 户 原 来 所 在 的 交 谈 室 中 注 销, 并 使 该 用 户 成 为 新 交 谈 室 的 一 员)
暂 停 交 流(C):"pause"。
恢 复 交 流(C):"continue"。
---- 以 上 为 本 电 子 白 板 软 件 所 遵 循 的 通 讯 协 议 集。 这 个 协 议 集 的 可 扩 充 性 很 强, 可 以 随 时 按 增 加 的 功 能 扩 充 协 议 集。 例 如 需 要 传 送 圆 形 图 案, 则 可 将 如 下 协 议 加 到 协 议 集 中:"circle" →(int) 颜 色 值 →(short) 圆 心 横 坐 标 →(short) 圆 心 纵 坐 标 →(short) 圆 半 径。
编 程 实 现
---- 程 序 设 计 分 服 务 器JAVA Application 和 客 户 端JAVA Applet 两 部 分 进 行。
---- 编 程 中 需 要 注 意 以 下 几 点:
服 务 器 程 序 不 要 采 用 客 户 端 接 入 时 建 立 用 户 线 程, 退 出 交 谈 室 时 销 毁 线 程 的 工 作 流 程。 因 为 有 些 操 作 系 统 的 线 程 操 作 机 制 不 够 健 全, 在 线 程 销 毁 时 线 程 所 占 资 源 不 能 被 完 全 释 放, 以 致 于 在 白 板 服 务 器 运 行 的 过 程 中 将 逐 渐 消 耗 掉 系 统 资 源。 所 以 应 在 服 务 器 初 始 化 时 按 照 最 大 允 许 同 时 上 线 的 用 户 数 建 立 所 有 用 户 服 务 线 程。 这 些 线 程 将 等 待 客 户 端 接 入, 当 用 户 退 出 交 谈 室 时 线 程 并 不 销 毁, 而 是 清 除 用 户 数 据, 重 新 进 入 等 待 接 入 状 态, 准 备 为 下 一 个 用 户 服 务。 这 样 就 保 证 了 白 板 服 务 器 可 以 长 期 可 靠 运 行。
当 用 户 在 白 板 上 连 续 绘 画 时 可 能 产 生 大 量 的 图 形 数 据, 客 户 端Applet 若 在 白 板 的AWT 事 件 处 理 程 序 中 完 成 将 这 些 数 据 传 输 给 服 务 器 的 任 务, 则 很 有 可 能 由 于 网 络I/O 的 瓶 颈 作 用, 使 得AWT 事 件 处 理 线 程 受 阻, 从 而 影 响 白 板Applet、 浏 览 器、 其 他 正 在 运 行 的 应 用 软 件 的 界 面 相 应 性。 解 决 的 办 法 就 是 使Applet 再 建 立 一 个 后 台 绘 图 数 据 传 输 线 程, 白 板 的AWT 事 件 处 理 程 序 将 用 户 的 绘 图 数 据 通 过 管 道 流(PipedStream) 传 输 给 这 个 线 程 后 就 返 回, 把 网 络 传 输 的 任 务 留 给 这 个 线 程 进 行。
在 服 务 器 和 客 户 端Applet 中, 协 议 集 每 一 个 子 协 议 的 实 现 都 要 分 别 建 立 一 个 同 步 块(synchronize), 该 子 协 议 的 全 部 操 作 都 要 在 这 个 同 步 块 内 完 成, 以 限 制 自 由 访 问 网 络 接 插 建 立 的 输 入 流 和 输 出 流。 使 得 当 一 个 线 程 执 行 一 个 子 协 议 时 能 够 独 占 这 些 网 络 资 源, 而 使 别 的 线 程 不 能 访 问 这 些 资 源, 以 保 证 线 程 能 够 完 整 正 确 地 执 行 子 协 议。 但 是 由 于 同 步 操 作 会 降 低 线 程 调 度 和 执 行 效 率, 所 以 要 在 确 保 子 协 议 完 整 执 行 的 前 提 下 尽 量 缩 小 同 步 代 码 块 的 范 围。
由 于 协 议 集 中 的 数 据 类 型 既 有 字 符 串 又 有 整 形 数, 因 此 在 程 序 中 选 用DataInputStream 和DataOutputStream 作 为 数 据 输 入 流 和 输 出 流。 此 外, 由 于UTF 格 式 的 文 本 支 持 中 文 字 符 集, 且 在 字 符 串 中 已 包 含 长 度 信 息, 可 以 方 便 数 据 读 取, 故 在 本 程 序 的 网 络 通 信 中 的 字 符 串 全 部 采 用UTF 格 式。 设 计 自 己 的 白 板 程 序 时, 可 以 根 据 需 要 换 用 其 他 文 本 格 式 和 编 码 规 则, 但 一 定 要 保 证 输 入 流 和 输 出 流 采 用 的 是 同 一 种 格 式 和 编 码。
考 虑 到 目 前Netscape Navigator 3.0 和Internet Explorer 3.0
- 1
- 2
- 3
- 4
- 5
前往页