毕业设计(论文)-即时通信系统的设计与实现.doc_第1页
毕业设计(论文)-即时通信系统的设计与实现.doc_第2页
毕业设计(论文)-即时通信系统的设计与实现.doc_第3页
毕业设计(论文)-即时通信系统的设计与实现.doc_第4页
毕业设计(论文)-即时通信系统的设计与实现.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录目录 摘要 摘要 1 1 关键字 关键字 1 1 1 1 引引 言言 1 1 1 1 选题的背景和意义 1 1 2 技术概要 1 1 3 RATIONAL 统一过程 2 1 4 系统需求和开发环境 2 2 2 需求分析需求分析 3 3 2 1 软件系统概述 3 2 2 软件系统功能简介 3 3 3 概要设计概要设计 3 3 3 1 概要设计简介 3 3 2 用例图 4 3 3 边界分析图 4 4 4 详细设计详细设计 5 5 4 1 总体架构 5 4 2 服务端设计 6 4 2 1 ChatUserSessionBean 的实现 6 4 2 2 PlutoDataStorage 的实现 8 4 2 3 PlutoMessageEngine 的实现 8 4 3 数据库设计 9 4 4 客户端设计 10 4 4 1 clientcore 11 4 4 2 swingui 13 4 5 客户端 UI 设计 14 5 5 本系统的架构分析本系统的架构分析 1515 5 1 JAVA消息服务 JMS 15 5 2 JMS 消息的组成 16 5 3 JMS 消息传递模式 17 5 4 JMS 在本系统的实现 17 致谢致谢 1818 参考文献参考文献 1919 附录附录 1919 ABSTRACTABSTRACT 2121 KEYKEY WORDSWORDS 2121 1 即时通信系统的设计与实现即时通信系统的设计与实现 摘要 摘要 局域网即时通信是一个企业内部进行组织和交流的重要工具 本文严格按照 Rational 统一过程构建了一个即时通信系统 重点研究了规范的软件架构过程 及关键技术 JMS JMX EJB 和 Mbean 在本系统中的应用 通过数据包在局域网 中的传送 信息处理任务在服务器和客户端的合理分配实现了高效的即时信息 交流 提高了企业内部的信息安全性 节约了成本 在企业管理中有重要的应 用价值 关键字 关键字 即时通信 统一建模语言 统一软件开发过程 Java 消息服务 1 1 引引 言言 1 11 1 选题的背景和意义选题的背景和意义 根据来自 Osterman Research 的调查报告 已经有 84 的企业的网络中使用了不同形 式的即时信息软件 到 2007 年 即时信息软件的使用将会遍及所有的企业 1 不同于 QQ MSN 等即时通信软件 在局域网内部构建的即时通讯系统以其易用性 安全性 实时 交互 资费低廉等优点 被越来越多的企业所青睐 极大降低了公司的管理成本 把公司 的管理提高到了一个新的层次 本文提供的即时通信系统是微盟电子公司的一个 titan 项 目的子项目 由本人和另外两位公司新员工在经验丰富的软件工程师的耐心指导下完成 本系统的整个开发过程严格按照软件工程的规范进行 以提高开发效率 降低软件维护难 度 增强软件的可扩展性 1 1 2 2 技术概要技术概要 本即时通信工具的开发采用目前最流行的 Java 语言及相关的 Swing 技术 J2EE 技术 EJB 技术 JMX 技术 MBean 技术 managed bean 和 JMS 技术 Java Message Server 总 体采用 3 层的客户机 服务器 C S 模型进行设计 包括 数据库服务器 应用程序服务器 端 应用程序客户端 Java 的可移植性是其广为流行的最大优势 也是本系统选用它作为开发语言和开发平 2 台的原因 使用其 Swing 控件开发的用户图形界面简洁明了 美观方便 在各个层次的组 件划分中还使用到了 J2EE 和 EJB 分别对各个层次的消息进行处理 同时对框架结构的管 理采用的是 JMX MBean 负责客户端和服务器的会话连接管理 但其状态维护由 EJB 负责 消息的发送与接收通过 Java 消息服务 JMS 实现 JMS 为每个用户建立自己的消息队列 通 过消息队列给在线用户发送接收到的消息 2 3 1 31 3 RationalRational 统一过程统一过程 统一建模语言 Unified Modeling Language UML 是一个通用的可视化建模语言 用于对软件进行描述 可视化处理 构造和建立软件系统制品的文档 UML 适用于各种软 件开发方法 软件生命周期的各个阶段 各种应用领域以及各种开发工具 UML 是一种 总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法 4 Rational 统一过程 Rational Unified Process RUP 是 Rational 软件公司 UML 的诞生地 已经被 IBM 并购 创造的软件设计方法学 与敏捷过程和微软过程并称为当今软件界最具影响力的三种软件 开发过程 它不仅为大多数软件开发环境提供了一个可供裁剪的过程框架 还在于它为软 件开发提供了一个兼顾技术和管理的完整视角 在其基础上 可以方便的集成软件工程领 域的最新实践成果 如 软件重用 逆向工程 软件架构 面向方面 和 主动过 程 等内容 形成更加完善的软件研发解决方案 5 在本即时通信系统的研发过程中 我们严格遵循 Rational 统一过程进行系统建模 分 析与设计 充分利用这一迭代的 增量的 用例驱动的开发过程所具有的优势 以提高开 发效率 增强系统的可维护性 本文第 3 4 章的类关系图和过程都是采用 RUP 的方法设计 更多的技术细节和模块 设计请参考本论文所附的源代码 1 41 4 系统需求和开发环境系统需求和开发环境 1 Windows 2000 以上 或者内核为 2 6 以上的任何 Linux 系统发行版 JBOSS 4 X MySQL 4 X Java 2 Standard Edition SDK1 5 2 Eclipse 这是由 IBM 捐出 4000 万美金支持的开放源代码的项目 Eclipse 不但是 一个非常优秀的集成开发环境 IDE 而且对 UML 提供支持 6 3 Jboss 目前 实现 J2EE 标准的主要产品包括 Sun 公司的 Sun ONE 系统 IBM 的 WebSphere 应用服务器 BEA 的 WebLogic 平台软件等 Jboss 是在性能上可以与这些产品 相媲美的免费的开发源代码项目 其出众的特点是 JBoss 服务器的实现是建立在 JBoss 微 小内核的基础上的 这使得 JBoss 的启动速度很快 差不多比 J2EE 的标准实现快了 10 倍 而且 JBoss 也比其他产品所需要的内存容量和磁盘空间要少得多 7 4 MySQL 是由瑞典的 T c X DataKonsultAB 公司开发的开放源代码的数据库系统 是 3 一个多用户 多线程的 SQL 数据库 是一个客户机 服务器结构的应用 它由一个服务器守 护程序 MySQL 和很多不同的客户程序和库组成 8 2 2 需求分析需求分析 2 12 1 软件系统概述软件系统概述 该即时通信软件 plutomessage 的目标是能够在局域网内部利用该软件进行交流 可作 为公司 企业的内部交流工具使用 即充分要求有两个界面 sever 端界面和 client 端界 面 sever 端要求可以通过界面设置用户和修改用户的属性 client 端要求可以 登录 查询通知 查找好友 聊天功能模块等 2 22 2 软件系统功能简介软件系统功能简介 该软件系统具如下具体功能 用户登陆 到数据库服务器中验证用户名和密码是否匹配 如果匹配将用户名传递给 下一个页面去处理 如果不匹配则提示错误信息 用户登出 主画面选择 登出 进入原始登录画面 退出系统 显示 查询好友信息 进入主画面 选择好友 显示好友详细信息 聊天 选择好友 输入内容 发送 成功对方将被通知收到新信息 失败 显示原因 管理聊天记录 选择好友 显示出用户和其选择好友的所有聊天记录 聊天记录包括 字段 From To Sent time Received time Message content 可排序记录和删 除一条或多条记录 管理私人档案 进入私人档案 显示私人档案信息 修改档案 可改档案信息包括 名字 密码 头像 自我描述 E MAIL 修改后通知其他好友 3 3 概要设计概要设计 3 13 1 概要设计简介概要设计简介 概要设计 是将软件需求转化成逻辑过程的一种设计手段 在此阶段我们将产出 用例分析图 根据 需求分析 将用户和系统的交互分类 以产出一个初步逻辑示图 边界分析图 根据 用例示图 详细表示每个用例所有的参与者之间的逻辑关系的一个逻辑示图 4 3 23 2 用例图用例图 用户可以进行的几个操作活动 Login Logout 为用户登陆和退出系统时进行的活动 这是每个用户在使用该软件时必须进行的操作 Communicate 为用户和自己的通讯录内的 好友进行信息交流时进行的活动 用户在在线好友组内选择选择要与其进行信息交流的好 友即可给其发送信息 QueryFriendsInfo 为用户查看通讯录内好友描述信息时进行的操作 用右键点击在线的好友 在弹出的菜单中选择查看好友选项即可查看在线好友的基本描述 信息 ManageHistory 为用户查看通讯录内好友的聊天记录时进行的操作 其操作与查看 好友基本信息类似 ManageMyProfile 为用户修改自己的简要信息描述时进行的操作 用 户在菜单栏即可完成相关的操作 用例图如下图所示 QueryFriendsInfo Login Logout Communicate ManageHistory User ManageMyProfile 图 1 用户功能模块用例图 3 33 3 边界分析图边界分析图 用户和好友进行聊天通信的整个过程 用户首先在 MainFrame 模块中选定一个在线的 好友 然后通过 ChatView 模块让用户输入聊天信息 接着聊天信息发送给 Communicator 模块处理 Communicator 模块把聊天信息发一份给 HistoryRespository 模块存储 同时 发一份给在线的好友 过程如下图所示 User MainFrame select friend OtherClients HistoryRespository Chatview input message Communicator notify Msg launch store message 图 2 聊天模块边界分析图 5 4 4 详细设计详细设计 4 14 1 总体架构总体架构 PlutoMessage 是一个 Client Server 模式的程序 包括客户端和服务端两部分 服务端使用 Stateful SessionBean 对外暴露服务端的功能 使用 JMS Java Message Service 给客户端发送消息 在 PlutoMessager 的服务端中 消息指的是服务端发送给客户端的一段数据 描述了 服务端的状态的变化 聊天的文字消息仅仅只是服务端发送给客户端的一种消息 服务端 发送给客户的消息分为 4 种 具体的信息如下 表 1 服务端发送消息列表 LoginMessage 当一个用户登陆成功后 这个用户的所有在线的好友都会收 到一条 LoginMessage LogoutMessage 当一个用户注销后 这个用户的所有在线的好友都会收到一 条 LogoutMessage FriendInfoChangeMessage 当一个用户修改自己的个人信息后 这个用户的所有在线的 好友都会收到一条 FriendInfoChangeMessage ChatMessage 当一个用户给他的好友发送文本聊天信息时 这个好友 会 收到一条 ChatMessage 客户端是一个 GUI 程序 通过 EJB Client API 和服务端的 Stateful SessionBean 通 信 使用 JMS Client API 收取服务器发送的消息 客户端要以一种直观 简洁的方式呈现 数据 接受用户的指令 便于用户使用 整个 PlutoMessager 的结构图如下 图 3 PlutoMessager 的总体架构图 6 4 24 2 服务端设计服务端设计 4 2 14 2 1 ChatUserSessionBeanChatUserSessionBean 的实现的实现 ChatUserSessionBean 和相关类的关系如图所示 图 4 ChatUserSessionBean 和相关类的关系图 ChatUserSessionBean 是服务器对外暴露的功能的入口点 每当一个用户连接到服务端 后 服务器都会生成一个 ChatUserSessionBean 的实例 用户通过这个实例访问服务器的所 有功能 每一个 ChatUserSessionBean 的实例都有一个 PlutoDataStorage 的实例和一个 PlutoMessageEngine 的实例 其中 PlutoDataStroage 负责访问数据库 实现所有数据的存 储功能 PlutoMessageEngine 负责维护一个在线用户的列表和负责消息的发送 PlutoDataStorageProvider 和 PlutoMessageEngineProvider 分别是 PlutoDataStorage 和 PlutoMessageEngine 的提供者 通过使用这种方式 实现了 ChatUserSessionBean 的逻辑功 能与数据的具体存储方式以及消息的具体发送方式无关 ChatUserSessionBean 是一种 Stateful SessionBean 这种 EnterpriseBean 的特性是 当且仅当用户连接到服务器时 才被服务器生成 当用户和服务器断开连接后 被服务器 回收 ChatUserSessionBean 提供的接口函数和功能如下 7 表 2 ChatUserSessionBean 提供的接口函数和功能 loginlogin 用户身份验证 logoutlogout 用户注销 getFriendsgetFriends 取得用户的好友列表 sendMessagesendMessage 向该用户的一个好友发送一条消息 changePasswordchangePassword 修改用户的登陆密码 changeUserInfochangeUserInfo 修改用户的详细信息 getHistoryOfAnUsergetHistoryOfAnUser 取得用户和某一个好友的聊天记录 cleanHistoryOfAnUsercleanHistoryOfAnUser 删除用户和某一个好友的聊天记录 ChatUserSessionBean 的几个关键函数的流程如下 Login 图 5 ChatUserSessionBean 的 login 顺序图 sendMessage 图 6 ChatUserSessionBean 的 sendMessage 顺序图 8 4 2 24 2 2 PlutoDataStoragePlutoDataStorage 的实现的实现 PlutoDataStorate 是服务端用来进行数据存储的功能模块 PlutoDataStorage 只是一个纯粹的功能接口 在服务端 PlutoDataStorage 的实现体 EntityDataStorage 通 过访问 UserEntityBean 和 MessageEntityBean 实现了数据的存储功能 UserEntityBean 和 MessageEntityBean 是两个 EntityBean 分别用于存取用户的数据和聊天历史的记录 PlutoDataStorage 和相关类的关系如图所示 图 7 PlutoDataStorage 和相关类的关系图 PlutoDataStorage EntityDataStorage 的各个函数的功能如下 表 3 PlutoDataStorage EntityDataStorage 的各个函数的功能表 validateUservalidateUser 用户身份验证 通过 UserEntityBean 实现 getUserInfogetUserInfo 取得用户的详细信息 通过 UserEntityBean 实现 changeUserInfochangeUserInfo 修改用户的详细信息 通过 UserEntityBean 实现 changeUserPasswordchangeUserPassword 修改用户的登陆密码 通过 UserEntityBean 实现 getFriendsOfAnUsergetFriendsOfAnUser 取得用户的所有的好友的信息 通过 UserEntityBean 实现 getMessageOfAnFriendgetMessageOfAnFriend 取得用户和一个好友聊天的历史纪录 通过 MessageEntityBean 实现 saveMessagesaveMessage 保存用户的聊天记录 通过 MessageEntityBean 实现 deleteMessageOfAnFrienddeleteMessageOfAnFriend 删除用户和某一个好友的聊天记录 通过 MessageEntityBean 实现 4 2 34 2 3 PlutoMessageEnginePlutoMessageEngine 的实现的实现 PlutoMessageEngine 是服务端用来发送消息的功能模块 9 PlutoMessageEngine 的功能有 判断该用户是否已经登陆 向在线用户发送消息 PlutoMessageEngine 只是一个纯粹的功能接口 在服务端 PlutoMessageEngine 的实 现体 ManagedBeanMessageEngine 通过访问 MessageEngineMBean 实现服务器中的全程对象 用以保存全局信息 MessageEngineMBean 是一个 JMX Java Management Extension 的 MBean MessageEngineMBean 内部有一个在线用户的信息列表 另外 MessageEngineMBean 还使用 JMS Java Message Service 为每一个在线的用户创建一个消 息队列 Pluto 就是通过这个消息队列实现消息的收发的 PlutoMessageEngine 和相关类的关系如图所示 图 8 PlutoMessageEngine 和相关类的关系图 PlutoMessageEngine ManagedBeanMessageEngine 的各个函数的功能如下 表 4 PlutoMessageEngine 的各个函数的功能表 registerUserregisterUser 用户上线 为用户分配一个消息队列 unregisterUserunregisterUser 用户下线 销毁用户的消息队列 isUserRegisteredisUserRegistered 判断一个用户是否上线 sendMessagesendMessage 给一个用户发送一条消息 sendAllMessagesendAllMessage 给除了当前用户外的其他所有在线用户发送一条消息 4 34 3 数据库设计数据库设计 Pluto 的服务端的数据库服务器使用 MySQL 实现 Pluto 服务端使用的数据库叫 pluto 数据库中有两个数据表 分别为 userdef 和 messagedef 这两个数据库的模式如 10 下表 表 5 userdef 表 userdefuserdef 字段字段数据类型数据类型描述描述 UserIDUserIDintegerinteger 用户 ID 主关键字 UserNameUserNamevarchar 22 varchar 22 用户登陆名 关键字 PasswordPasswordvarchar 22 varchar 22 用户登陆密码 EMailEMailvarchar 100 varchar 100 用户的电子邮件 可选 UserIconIDUserIconIDintegerinteger 用户的头像编号 NickNameNickNamevarchar 22 varchar 22 用户的别名 可选 DescriptionDescriptionvarchar 255 varchar 255 用户的自我描述 可选 表 6 messagedef 表 messagedefmessagedef 字段字段数据类型数据类型描述描述 MessageIDMessageIDintegerinteger 消息 ID 主关键字 UserIDUserIDintegerinteger 消息所有者 ID SenderIDSenderIDintegerinteger 发送者 ID ReceiverIDReceiverIDintegerinteger 接收者 ID SendTimeSendTimedatetimedatetime 消息发送时间 ReceiveTimeReceiveTimedatetimedatetime 消息接收时间 ContentContenttexttext 消息的内容 数据库的创建脚本参考附录 4 44 4 客户端设计客户端设计 客户端是一个用采用 MVC 模式写成的 GUI 程序 包括 taskengine clientcore 和 swingui 三部分 三部分的功能如下 表 7 客户端 GUI 程序功能表 taskengintaskengin taskengine 是客户端负责和服务器通信的模块 除了消息接收的工 外 所有和服务器交互的功能都在 taskengine 中实现 clientcoreclientcore clientcore 是客户端的核心框架 主要功能是 定义客户端的逻辑 UI 接口 接收用户的输入请求 协调客户端的各窗口的数据同步 把户的请求发送到服务器 11 接受消息 swinguiswingui Swingui 是一个用 Java Swing 实现的物理 UI 实现了 clientcore 中定义的逻辑 UI 接口 PlutoTask 是这八种 task 的基类 PlutoTaskEngine 是 task 的执行者 PlutoTaskListener 是用于监听 task 执行过程的一个接口 客户端在需要调用服务端提供的功能的功能的时候 只需要提交一个相对应的 task 到 PlutoTaskEngine 的队列中就行 PlutoTaskEngine 被激活之后就一直监视自己的队列 一旦队列中有 task 存在 就会把 task 发出去 然后在另外的线程中去执行这个 task 服务端是通过 Sessionful Bean 对外暴露功能的 task 和服务器通信就是使用 EJB Client API 去调用 ChatUserSessionBean 提供的函数 这 8 种 task 和 PlutoTaskEngine 等相关类的关系如下 图 9 task 和 PlutoTaskEngine 等相关类的关系图 4 4 14 4 1 clientcoreclientcore clientcore 是客户端的核心框架 主要功能是 定义客户端的逻辑 UI 接口 接收用户的输入请求 协调客户端的各个窗口的数据同步 并通过 taskengine 把用户的请求发送到服务器 接受消息 在客户端 view 表示逻辑 UI 一种 View 代表和用户直接交互的一种窗口 任何一种 view 都有一个与之对应的 controller 存在 controller 是客户端的逻辑功能所在 12 controller 和 view 的交互关系为 view 会捕捉用户的所有操作 然后 view 会把捕捉到的 操作提交给相对应的 controller vontroller 收到 view 提交的操作后 会进行一些逻辑 处理 然后会把结果反馈给 view 让 view 去显示这些结果 如果 controller 无法处理 view 提交的操作 controller 会把这些请求提交给其他的 controller 去处理 在客户端中 view 和 controller 之间 controller 和 controller 之间使用事件来互 相通信 controller 之间的通信是通过 controller 的管理者 application 对象来负责的 application 对象负责生成所有的 controller 并负责在 controller 之间中转事件 view controller 和 application 之间的关系如下图 图 10 view controller 和 application 之间的关系图 PlutoView 就是 view 的 PlutoController 就是 controller PlutoApplication 就是 application EventTarget 是一个抽象的接口 实现了这个接口的类都将具备接受事件的 能力 PlutoController 和 PlutoApplicaiton 都实现了 EventTarget 接口 PlutoMessager 中 有 8 种不同的 view 分别表示八种不同的窗口 这 8 种 view 关系 如下图 13 图 11 View 之间的关系图 PlutoMessager 中有 10 种 controller 存在 这 10 种 controller 关系如下图 图 12 controller 之间的关系图 4 4 24 4 2 swinguiswingui swingui 是 PlutoMessager 的物理 UI 它用 Java Swing 实现了 8 种窗口 分别与 clientcore 中定义的 8 种 view 相对应 他们是真实的用户看到的窗口 这八种窗口如下 表 8 swingui 对应的 view MainWindowMainWindow 实现了 MainView LoginWindowLoginWindow 实现了 LoginView 14 FriendInfoWindowFriendInfoWindow 实现了 FriendInfoView MyProfileWindowMyProfileWindow 实现了 MyProfileView ChatWindowChatWindow 实现了 ChatView ChatHistoryWindowChatHistoryWindow 实现了 ChatHistoryView ChangePasswordWindowChangePasswordWindow 实现了 ChangePasswordView AboutWindowAboutWindow 实现了 AboutView 把 UI 分为逻辑 UI 和物理 UI 可以把接口和实现分开 可以在不更改程序内部逻辑的 情况下 轻而易举的修改物理 UI 在 PlutoMessager 中 物理 UI 直接和逻辑 UI 相隔离 这样 如果要用其他的 UI 技术 比如 SWT Standard Widget Toolkit 来重新实现 UI 只需要实现逻辑 UI 声明的功能即可 而不需要更改 clientcore 4 54 5 客户端客户端 UIUI 设计设计 1 主窗口 主窗口为用户运行程序时的第一个窗口 窗口界面如下图 图 13 用户登陆成功后的窗口图 2 聊天窗口 通过聊天窗口的 你可以实现与好友的聊天 显示聊天时间 清除聊天记录 隐藏聊 天窗口 和关闭聊天窗口 15 图 14 聊天窗口图 3 聊天历史记录 要求能记录与好友之间的聊天记录 具体的实现窗口如下 图 15 聊天记录图 当无聊天记录时应显示窗口 16 图 16 无聊天记录图 5 5 本系统的架构分析本系统的架构分析 本系统架构的独到之处在于在服务器端巧妙地应用了 JMS 的消息队列处理机制高效地 解决了消息在服务器端进行处理和转发的复杂的逻辑过程 这是本系统有别于其他即时通 信工具 QQ MSN 的地方 5 15 1 JavaJava 消息服务 消息服务 JMSJMS JMS 仅仅是由包括 Sun Microsystems 和 IBM 等在内的几个公司合作设计的一种叫做 MOM message oriented middleware 面向消息的中间件 的软件底层的 API 其定义了 Java 中访问消息中间件的两个接口 第一个接口定义了客户端与消息服务之间的关系 第 二个接口定义了 JMS 与应用服务器 JMS 宿主服务器 即实现 JMS 的服务器 之间的关 系 JMS 的目的是应用程序能在异步情况下可靠地传输和接受消息 基于消息的异步处理 模型采用非阻塞的调用特性 发送者将消息发送给消息服务器 消息由消息服务器维护 消息服务器在合适的时候再将消息转发给接收者 如图 17 所示 消息系统 应用程序 应用程序应用程序 应用程序 图 17 消息服务系统图 5 25 2 JMSJMS 消息的组成消息的组成 JMS 消息由以下三部分组成 如图 18 所示 9 10 消息头 header JMS 消息头包含了许多字段 它们是消息发送后由 JMS 提供者或 消息发送者产生 用来表示消息 设置优先权和失效时间等等 并且为消息确定路由 属性 property 由消息发送者产生 用来添加删除消息头以外的附加信息 消息体 body 由消息发送者产生 JMS 中定义了 5 种消息体 ByteMessage MapMessage ObjectMessage StreamMessage 和 TextMessage 17 Head routing addressing identification Property optional application specific parameters Body message payload text bytes etc 图 18 JMS 消息结构图 5 35 3 JMSJMS 消息传递模式消息传递模式 JMS 支持两种消息传递模式 点对点模式 P2P 和发布 订阅模式 Publish Subscribe 这两种都是人们熟知的 push 模式 消息的发送者是活动的发起人 而接收者则是被动的接收消息 在 JMS 中 这些消息传递模式被称为消息域 message domain 9 10 1 JMS 点对点消息域 在点对点模式中 发送者和接收者对消息传送的目的地址达成一致 即所谓的队列 queue 消息队列位于 JMS 提供者中 消息发送者向一个消息队列发送消息 消息接收 者可以在消息发送后的任何时刻从这个队列中 被动地 接收消息 在接收者确认之前消 息一直保存在消息队列中直到过期 点对点模式的结构图如图 19 所示 消息 1 消息 2 消息 3 消息队列 图 19 点对点模式图 2 JMS 发布 订阅消息域 在发布 订阅模式下 发送者被称为发布者 publisher 一个消息可已有很多接收者 这些接收者被称为订阅者 subscriber 发布 订阅模式采用与点对点模式完全不同的消息 发送模式 在发布 订阅模式下 发布者给一个主题 topic 发送消息 多个订阅者在订阅 发送 接收 18 的时候可以订阅他们感兴趣的主题 一个主题可以被多个订阅者订阅 一个订阅者也可以 订阅多个主题 一个主题的消息只被发给该主题的所有订阅者 发布 订阅模式的结构图如 图 20 所示 主题 图 20 发布 订阅模式图 5 45 4 JMSJMS 在本系统的实现在本系统的实现 JMS 在本系统对消息的传递模式采用的是点对点消息域 其在服务器主要是通过 PlutoMessageEngine 模块来实现 当一个用户要登陆系统的时候 他首先通过 MessageMonitorController 连接到服务器 在客户端注册一个 Listener 该 Listener 的功能就 是用来监听服务器发送过来的消息 同时在服务器生成一个 SessionBean 该 SessionBean 是客户端和服务器的唯一接口 通过它可以访问服务器的所有功能 然后在 MeaageEngineMBean 内部的在线用户信息列表里面保存自己的信息 另外 JMS 也同时为 该用户创建一个消息队列 Queue 并且负责这些消息队列的管理和维护 当用户要给一 个目标用户发送消息时 JMS 就把消息丢到目标用户的消息队列里面发送出去 同时也通 过 PlutoDataStorage 模块在数据库做一个备份 通过使用消息队列来实现异步传输 客户 端只需要通过消息向服务器提交任务 之后便不需要关心数据如何处理 何时处理 彻底 解开了客户端与服务器的耦合 同时也不必先把消息写入数据库 当转发的时候再从数据 库读出来 消息只需一次写入数据库做备份 减少了对数据库的访问 即保证了数据库的 安全可靠 也减少了服务器的资源消耗 消息的异步处理机制 发送和接收是异步的 发 送者无需等待 二者的生命周期也可以不必相同 而且发送者可以将消息间接传给多个接 收者 大大提高了程序的性能 可扩展性及健壮性 通过 JMS 的消息处理机制 采用消息 异步处理模型对消息进行管理和维护 大大简化了服务端的消息处理逻辑 结束语结束语 经过一个多月的努力 我的论文已经初见雏形 在本次的毕业设计中 让我有机会把 四年来学到的知识重新温习了一遍 并且系统的组织起来 通过这次训练 培养了我的团 队合作精神 让我的动手能力和研究分析能力都有了很大的提高 同时也意识到了团队合 作和软件工程方法以及对新技术的合理应用在软件开发过程中的重要性 一个巨大的软件 发送 分发 分发 分发 19 项目 光靠微不足道的个人能力是无法实现的 必须有很多人来合作完成 而如何对这些 人进行组织管理 合理分工 这必须得用软件工程方法学来实现 同时还要注重对前人的 研究成果的应用 站在巨人的肩膀上 只有这样才可以开发出高效 健壮性强 易扩展和 维护的软件来 本次设计开发的即时通信系统已经实现了即时信息交流和相关的基本功能 是个适合于在企业和部门内部使用的通信系统 它有别于一般的聊天软件 其主要目的是 便于企业和部门内部员工之间的信息交流 而不是用于娱乐 因此它没有自己添加好友 视频 和在线游戏等会影响员工工作的功能 而且为了减少数据库内的数据冗余 任何账 号的初始化和注销都由一个数据库管理员完成 账号初始化后由用户自己修改密码和其他 信息 以保证用户的隐私与安全 同时用户的所有聊天记录都会永久备份在数据库中 便 于过后验证查询 但是由于时间紧迫和能力有限 这个通信系统也有其有待于完善的地方 比如文件的传输共享和语音通话 虽然这些功能在局域网内部可以通过系统软件来实现 但是效果还不是很理想 操作也比较麻烦 如果能把这些功能集成到该系统上来 操作将 会更加方便快捷 这样的话将会使信息的交流更加方便和多样化 致谢致谢 写到这里 即我的学位论文将要付梓的时候 想要感谢的人很多 这篇并不太长的论 文 不仅使我想到半年来的艰辛工作 四年来的寒窗苦读 更是我人生最重要的一段时间 的一个句号 感谢陪我走过陪我经历这一切的所有的朋友 同学 老师 父母 感谢你们 对我的帮助 感谢你们给我的教导 感谢你们给我的温情 当然 还要感谢我的母校 中 南民族大学 感谢微盟电子软件组副课林宇亮和两名指导工程师田儒军 孙波以及软件组的全体同 事 是他们的信任给了我很多锻炼的机会 也一直对他们给予我的生活上的照顾心存感激 和他们一起的日子是我人生中一段难忘的经历 最后 衷心感谢指导老师郑鹏和严千钧和在百忙之中抽出时间审阅本论文的专家教授 参考文献参考文献 1 陈金国 企业 QQ 遭遇尴 尬 shtml 2003 05 19 2006 05 10 2 宋中山 严千钧 Java 程序设计 M 北京 清华大学出版社 2005 年 3 美 Rod Johnson 著 魏海萍译 J2EE 设计开发编程指南 M 北京 电子工业出版 20 社 2003 4 美 James Rumbaugh Ivar Jacobson Grady Booch Unified Modeling Language Reference Manual 2nd Edition M 北京 机械工业出版社 2005 年 5 美 克鲁森 Kruchten P K P 编著 徐正生 陈逸 邓启威 译 Rational 统一过 程 实践者指南 M 北京 中国电力出版社 2004 年 6 陈刚 Java 开发利器 Eclipse 丛入门到精通 M 北京 清华大学出版社 2005 年 7 刘洋 魏飞 精通 JBoss EJB 与 Web Service 开发精解 M 北京 电子工业出版社 2004 1 244 8 Ian Gilfillan 王军 MySQL 4 从入门到精通 M 北京 电子工业出版社 2003 1 35 9 美 John T Bell James T Lambros Stanford Ng 编著 汪青青 卢祖英 译 J2EE 开源工具包 北京 清华大学出版社 2005 年 242 315 10 美 Stephen Asbury Scott R Weiner 编著 王强 田原 王军 译 Java 企业级应 用开发指南 北京 机械工业出版社 2004 年 553 624 11 张海藩 软件工程导论 M 第四版 北京 清华大学出版社 2003 1 326 12 萨师煊 王珊 数据库系统概论 M 第三版 北京 高等教育出版社 2000 3 242 13 Olaf de Senerpont Domis Businesses are getting the instant message Businesses are getting the instant message 2100 1032 3 5770640 html 2005 7 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论