软件传输到服务器端,服务器端将检查发送过来的信息包格式之类的正确性,通过验证后给软件发送反馈。软件收到回馈后,将给用户提示。
(2) 语音消息:好友之间可以发送语音消息。用户点击聊天界面下方的发送语音按钮不放后,软件将开始录音。
(3) 图片文件:好友之间可以发送图片文件。用户可以选择手机本地图片和拍照两种方式。
消息发送流程图3-4如下:
图3-4消息发送流程图
3.1.2服务器功能设计
目前市场中小范围局部的聊天软件主要为:
基于环信、融云等第三方IM服务器的通讯聊天软件或者是基于XMPP协议利用OpenFire数据库的通讯聊天软件。
此次本项目软件主要使用基于XMPP协议的OpenFire服务器,XMPP协议作为一个被广泛使用的消息协议,有大量的网络资料和成熟开源模块,例如在Android和IOS上,就很方便集成XMPP协议。IM作为一个复杂的系统,有方方面面需要考虑,使用成熟的协议,能帮助我们避免很多问题,提高开发效率。
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。开发者可以使用它轻易的构建高效率的即时通信服务器。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务OpenFire作为服务器。允许多个客户端同时登录并且并发的连接到一个服务器上。服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。在Oponfire服务器中。针对每个用户的请求,创建一个线程来进行响应,同时采用线程池来创建和管理线程,提高了服务器的执行效率。线程池的大小可以根据服务器在运行的过程中接收到的用户请求的数量进行自动调整。
openFire服务器如图3-5所示,openFire消息发送原理图如图3-6所示。
图3-5 openFire服务器
图3-6 OpenFire消息发送基本原理图
3.2软件的数据库设计
通过以上对客户端功能设计,要想实现不同客户端的用户通信,服务器端功能主要包括:对客户端发出的消息的侦听、存储、反馈。所以数据库设计方面也要满足这些要求。
本项目软件服务器端主要采用OpenFire服务器的数据管理功能对数据进行管理,下面的数据库表列出了系统运行时需要涉及的数据信息,共4张表,分别是用户注册信息表、好友信息表、聊天信息会话表和通讯信息表。
(1) 用户注册信息表,用于存放用户注册时录入的信息,如下表3-4所示。
表3-4 用户注册信息表
字段名 类型 约束 键值 说明 User_id String 非空 主键 内部使用id User_name String 非空 注册后系统使用id User_phone String 非空 用户手机号 password String 非空 用户密码 (2)好友信息表,用于存放联系人信息,如下表3-5所示。
表3-5 好友信息表
字段名 类型 是否为空 键值 说明 T_id int 否 主键 自增长id F_ower_id string 否 用户id F_contact_id string 否 好友注册号 F_status string 好友在线状态 F_nickname string 好友昵称 F_mood string 好友心情短语 F_phone string 好友 F_portait_uri string 好友使用头像
(3)聊天会话信息表,主要存储用户和好友的会话信息,它的字段如表3-6所示:
表3-6 聊天会话消息表
字段名 类型 约束 键值 说明 _id int 非空 主键 自增长id Owner_id string 非空 拥有者id Data_id string 非空 数据id Contact_id string 非空 好友uid D_time string 会话创建时间 D_last_content string 会话最后内容 D_last_time time 会话最后时间 D_last_type int 会话最后消息类型 D-count int 会话消息数目 (4)通讯消息表,存储的是用户与联系人通讯的消息,它的字段如表3-7所示:
表3-7 通讯消息表
字段名 类型 是否为空 键值 说明 T_id int 否 主键 自增长id L_owner_id String 否 用户id L_data_id String 否 数据id F_uid Stirng 否 联系人id L_data_time time 消息时间
表3-7(续)通讯消息表
字段名 类型 是否为空 键值 说明 L_data_type int 消息类型 L_data_content Stirng 消息内容 L_data_uri String 图片uri L_data_state int 语音发送状态 L_data_audio_marked int 语音消息读取状态
3.3本章小结
本章主要根据需求分析对软件设计进行了如下设计:注册模块设计、登录模块设计、用户管理模块设计、个人信息管理设计、通讯录模块设计以及数据库的设计。
4 软件实现
4.1服务器端
4.1.1配置OpenFire服务器
在配置或二次开发OpenFire服务器之前,首先应该去官网下载OpenFire相关的构件和程序。当成功下载好OpenFire服务器后,我们首先将其解压,然后在openfile/bin目录下找到OpenFire.exe,双击即可启动OpenFire服务器,如图4-1所示。
图4-1 启动OpenFire服务器
当成功启动OpenFire的服务器后,我们输入:127.0.0.1:9090进入OpenFire服务器的管理页面。OpenFire管理页面的端口为9090,缺省账号和密码都是admin。如果是第一次登录OpenFire服务器的管理页面,我们则需要配置一些初始信息,当成功配置好后,我们便可以完成登录。
OpenFire的管理页面包含5个菜单选项,分别是服务器基本信息配置选项、用户组管理选项、会话管理选项、分组聊天选项和插件选项。其中服务器基本信息配置选项主要包含了OpenFire的一些常规配置,比如端口的配置、系统属性设置、缓存设置、数据库设置(OpenFire提供了自带的嵌入式数据库)等等。而用户组管理选项可以用来管理注册用户。会话管理选项则用于管理客户端连接。分组聊天选项则用于管理会话组。而插件选项主要是用于添加开发人员对OpenFire服务器管理页面的功能扩充。OpenFire的管理界面如图4-2所示。
图4-2 OpenFire的管理页面
4.1.2使用Smack API与OpenFire建立连接通信
Spark利用Smack API进行与OpenFire服务器通信的客户端程序。成功下载好Spark后,首先需要进行安装,然后注册登录用户,最后便可完成登录,添加用户进行会话。建立通信代码如图4-3
图4-3 Smack API与OpenFire建立连接通信代码
4.2客户端
4.2.1用户注册模块
用户在登录页面选择进入注册页面前,系统需要判断用户名是否为己注册。
(1) 未曾注册用户名:在注册页面用户需要填写注册信息,包括用户名、用户密码。之后系统将存储用户的信息以便数据库以后检测用户信息。
(2) 如果用户名已注册:如果用户名已注册,系统会弹出提示,提示用户 该用户名已被注册。用户可以根据提示选择是否换个注册名或者选择找回该用户名的密码。
BaseProtocol 是一个基类,HTTP传输的所有协议包都将继承它。基类主要有三个参数:mid、mType、mTimeOut。
BaseProtocol 的主要方法有:setParas()、getSendXML()、parseXML():、
sendCodeProtocol 是发送验证码协议类。VSetPwdProtocol 是设置密码协议类。以上三个类都继承至BaseProtocol 类,HttpEngine在需要各个功能时分别初始化上述三个对象,然后在getResponseOqb获取服务器返回的XML数据,上述三个子协议将分别解析各自对应的XML数据。
Rigiste是注册功能运行的主要类,所有与界面相关的操作都由它完成,同时
请求底层数据的发起也是由它完成。它的主要函数如下:
Register()、initView()、initData()。
registerProgress:注册流
上一篇:
暑假社会实践论文
下一篇:
记录文件6:基于IOS的易车新闻客户端