APP下载

基于Socket通信的社交应用软件

2020-02-02甄泰航

电子技术与软件工程 2020年16期
关键词:浏览器好友账号

甄泰航

(哈尔滨工程大学 黑龙江省哈尔滨市 150000)

1 课题背景

在实现阶段,目前市场大部分社交软件实现的客户-服务器的通信方式,响应方面可能存在时间方面的不足。因此在社交应用软件上的Socket 通信方式的优势开始显现出来:Socket(套接字)是把传输层上层复杂操作抽象化的一组实现接口,在编写代码时只需配置文件调用相应驱动方法就可以在数据传输时满足TCP/IP协议,通过此方式实现通信过程。因此对于用户使用来说,一组简单的接口足以让Socket 按照指定的协议组织数据。

该社交聊天系统将采用多种技术和平台进行开发,从角色功能上将系统分为Android Studio 开发的用户端和MyEclipse 开发的管理员端:

客户端管理员与用户分开开发实现。在客户端的管理员模块界面利用MyEclipse 平台进行Servlet 配置和JDBC 配置开发Java web,管理员在浏览器上访问页面网址进入相应页面,而用户模块界面采用Android Studio 平台开发,依靠模拟器进行在PC 端实现。这样开发的优势在于我个人来说能进行对系统的分解开发,而且能够充分利用所学知识进行毕业设计。此外在引入相关的SDK 时Android Studio 与MyEclipse 可进行共用,能更加方便组织相关开发工具包或者扩展包的路径。

发布的空间动态和聊天信息的存储。有关空间动态的存储内容主要分为文字和图片两部分。对于文字信息的存储,本系统采用MySQL 数据库中相关位置来存储,而对于图片信息的存储,则将其图片的文件存放地址保存到数据库中,这样设计方便用户在获取图片的时候直接在数据库中访问地址获取图片。有关用户聊天信息的存储则利用Android 支持的SQLite 数据库进行存储,它的优势在于非常轻量级,存储数据非常高效,查询和操作数据简单方便。此外 SQLite 不需要安装和配置,有很好的迁移性,能够嵌入到很多应用程序中。

2 系统关键技术

2.1 Android的系统架构

安卓系统层次主要分为四层,分为应用层(利用该层JAVA 编写代码进行实现功能)、应用框架层(主要包含的服务能提供各种安卓开发的基本组件,如内容提供器等等)、系统运行库层(提供如SQLite 等可供调用的数据库等功能)、Linux 内核层(与底层驱动相关)[7]。

2.1.1 Linux 内核层(Linux Kernel)

Linux 内核层主要涉及一些与底层驱动相关的方法和接口,如蓝牙驱动、相机驱动等。

2.1.2 系统运行库层(Libraries 和Android runtime)

该层主要对项目系统提供了开发可能使用的一些特性支持,如SQLite 库提供微型数据库,Webkit 提供浏览器内核支持,还有媒体框架等其他方面[9]。

2.1.3 应用框架层(ApplicationFramework)

在Android Studio 中我们各种管理器位于该层,可以用相应的代码进行开发和驱动,其中与安卓开发有关的各种基本控件也都是在该层,对APP 程序进行管理。

2.1.4 应用层(Application)

在构建程序时在该层中进行代码的编写(Android Studio 中的APP 包),在项目中在该层采用java 语言进行编写。此外该层也支持用户所采用的一些前端,如手机模拟器、浏览器等。通过框架层管理好的APP 程序可以通过应用层服务于用户。

2.2 Android四大核心组件

安卓系统在开发应用程序时有四个基本组件尤为重要,它们分别是Activity、Service、Content Provider 以及BroadcastReceiver[5]。

Activity 在应用程序中通常会以一个包含一些控件的界面来显示,可以随时监听并处理即将发生的用户事件。在一个Activity 与另一个Activity 之间采用相应的代码来做连接实现相应的界面切换或者数据流传输,通常以按钮的方式来使程序通过相应的判断进入相应的下一界面。

Service 是一个长期存在的没有用户界面的程序,可用于开发监控等程序[11]。在用户在使用应用程序时如果在利用Activity 实现各界面跳转时而要维持某些状态继续运行,可以通过相应方法启动Service 程序来完成,而该状态会一直保持直到其结束,不受界面跳转的影响。

Content Provider 能够使程序指定的数据集提供给其他应用程序[2],在应用程序内即将处理或者处理后数据要用于进行存储或其他用处时就可以用到它进行处理,在某些方面起到了接口的作用。

BroadcastReceive 主要用于在Activity 进行事件处理的时候对于某些事件可起到屏蔽的作用。它和Service 一样没有用户界面,但是能够和Activity或者Service相互配合来响应应该接受的信息[5],也对与框架层内其他部分进行调用来实现应用程序的相关要求。

2.3 B/S技术

B/S 结构(浏览器/服务器模式),是在互联网技术兴起后对C/S 进行改进而新形成的网络结构,之所以快速崛起是因为C/S 只能应用在小范围的网络环境之中并配备专门服务器,相比B/S 则是以广域网为基础的,因此相比之下安全性隐患较大。但是B/S 架构可以让我们在后台编写成的系统功能可以在服务器上得以实现,对系统开发人员、测试人员甚至用户有极为方便的体验。用户需在系统开发后安装浏览器后使项目利用服务器运行,如Internet Explorer等,安装数据库用以进行系统的数据访问,如MySQL 等。只需要通过网络服务器,浏览器与数据库就可以随时进行数据存储或访问。

用户在浏览器上进行的如增删改查等各种操作通过服务器进行对数据库内数据的请求访问。用户在浏览器端的请求交由服务器处理,然后将相应的处理结果反馈给浏览器,这样用户的要求就会得以实现。其他的数据处理和请求都由Web 服务器完成。由于不同浏览器在操作系统中被广泛嵌入和使用,而且不断发展,该结构已经成为软件应用的主流结构模式。

2.4 SQLite数据库

SQLite 是一个轻型的、无需服务器的、无需复杂配置的开源数据库,由D.Richard Hipp 在2000年发布。SQLite 最大的特点是使用便捷、调用方便,性能卓越,目前广泛应用于各种领域的软件开发中,仍然在不断发展。此外最重要的时SQLite 存储信息是无类型的,这意味着可以将任何类型的数据保存到任何要保存的所创建的表中任何列中,而且无需声明该列的数据类型是什么,在SQLite数据库中我们可以完全不用指明该字段的类型。

此外SQLite 还具有以下优缺点:

(1)轻量级:它所占用资源非常低,甚至只需要几百K 的内存就可以运行。

(2)读写性能:由于它不存在数据库的服务器端,因此对数据库内数据的访问性能很高,与其他的开源数据库相比SQLite 的运行速度要快很多。但是在读写方面SQLite 存在性能不足的问题,在读写操作使可能会出现数据库阻塞的现象。

(3)兼容性强:能在装载32 位或64 位操作系统上的计算机上成功运行,除了当前主流的操作系统之外,它也能对许多移动嵌入式操作系统也提供支持,如安卓、塞班、Windows Mobile 等。

(4)接口:SQLite 能够用不同编程语言进行实现并为其提供了编程接口,如Java、PHP、Python 等并有相应的配置代码和驱动方法,对于掌握不同代码要求的用户有极大便利。

3 系统分析

3.1 系统功能需求分析

本社交聊天应用软件主要满足了用户进行社交交友聊天的功能,前端用户通过本平台可进行添加好友、好友聊天,同时系统还设有朋友圈功能,用户可发布分享信息,此外对于违规前端用户可进行封禁,充分满足前端用户的各类需求。

后台管理员可登录账号查看所有用户的各项信息,并可对违规用户进行封号或者解封操作。

本系统客户端的大功能模块可分为:用户模块、管理员模块、用户关系模块、空间动态模块、社交聊天模块四部分。

用户模块:该模块主要体现每位用户的个人基本资料信息及其相关操作。主要包括用户注册子模块、用户登录子模块、个人资料修改子模块、账号登出子模块、密码修改子模块。

用户关系模块:该模块主要体现用户之间的关系,如在社交软件中两个用户甲和乙,甲向乙发送好友请求后,乙收到通知消息后同意添加好友,则甲和乙成为好友关系,而无需乙再向甲发送好友请求。这种单向关系在社交聊天软件中非常方便。此外系统用户间存在投诉关系,其他可对非法用户提供投诉并反馈至后台处理,该模块主要包括检索联系人模块,添加好友模块、投诉用户模块、好友验证模块。

空间动态模块:该模块主要实现用户的空间动态的发布,文本和图片形式均可实现,其他用户可以对其动态进行点赞与评论。主要包括点赞模块、评论模块、发布模块。

社交聊天模块:该模块是本系统所实现的最重要部分,用户之间进行聊天交流都需要通过该模块实现,用户之间可通过发送文本、图片、语音以及Emoji 表情等进行信息交流。

系统的后台管理系统中作为系统管理者和维护者,管理员通过账号密码进行登录后查询看到所有用户注册的基本信息,对于其他用户的投诉信息可进行处理(进行解禁或者彻底清空该违禁用户数据)。

3.2 系统性能需求分析

(1)存储性:用户数据方面可能信息数量过大,存储处理较为麻烦,所以项目采用MySQL 数据库进行开发,利用其能够存储处理大量数据的特点。此外在软件实际投入使用或者后续开发时,最好再额外配备专门的数据库管理员进行管理,保证存储的用户数据完整性和安全性。

(2)易学性:系统设计的各种功能操作对于用户使用应该简单方便,在界面上有合理明确的控件或者文字提示,保证用户按照正常使用习惯满足自己需求。

(3)数据要求:数据库内的数据应该统一规范化处理,保证存储数据的实时性和独立性。例如不能产生删除某些数据的时候会连带着把不需要删除的数据都删除掉的情况发生(本系统删除封禁用户,即解禁时,不应把该用户的全部数据库数据删除)。

(4)稳定性:开发的基于Socket 通信的社交应用软件在服务器开启、代码运行之后系统各界面、控件以及链接等应该能够稳定实现,所运行的代码不出现崩溃现象。

(5)安全性:在开发系统的编码过程中要避免病毒类或漏洞类代码的产生,必须在登陆、注册等方面设计相应的验证方法以拦截陌生或非法账号。

4 系统设计与实现

4.1 系统开发流程设计

在开发基于Socket 通信的社交应用软件时,需要进行项目分析对系统的整个流程进行规范设计。首先从业务、用户等多方面角度进行项目系统的需求分析。第二根据需求分析的结果进行各部分和整体的设计,注意各部分之间的关系。第三将编写代码实现各部分功能。第四将开发好的各功能模块进行整合,并整体开发。最后对系统进行的测试,发现错误或者缺陷后及时修正。

4.2 系统运行环境设计

系统开发运行采用支持Windows10 操作系统和配置好Java 环境的计算机,采用开源的Tomcat7.0 作为服务器,采用MySQL 数据库进行数据存储,通过MyEclipse 平台和Android Studio 平台分别对管理员界面和用户界面进行代码编写开发。

4.3 数据库表设计

基于Socket 通信的社交聊天应用软件基于MYSQL 数据库进行数据存储,下面介绍数据库中的各个表的详细信息。

表1:浏览器兼容性测试用例表

表2:模拟器兼容性测试用例表

好友信息表:表中包含用户与好友对应关系的基本属性信息。friendId(编号)为主键,经分析在系统中每个用户与其好友为一对多的关系,因此,建表将friendUserId(用户Id)与其friendRecommendUserId(好友Id)进行对应存储来实现目的。friendState(状态)通过置整数型(如“1”、“2”)的方式确定发送好友申请的用户是否通过验证成为好友。

朋友圈信息表:表中包含用户发表动态的基本属性信息。imgId(编号)为主键,用户在发布动态时多字符型imgMsg(标题)与imgMessage(内容)为非空项。其他属性为imgUserId(用户编号)、imgUserName(用户名)、imgTime(添加时间)。

用户信息表:表中包含用户的基本属性信息。表中uid(编号)为主键,用户通过注册子模块进行相应的数据输入,其中uname(用户名)和upswd(密码)为非空项,其中整数型utype(类型)通过置“0”或置“1”的方式确定该用户是否为违规用户。其他属性为usign(签名)等基本用户个人信息不再赘述。

评论信息表:表中包含用户动态评论的基本属性信息。reviewId(编号)为主键,各个用户在对各个朋友圈的评论在数据库通过imgUserId(用户编号)和reviewMessageId(朋友圈编号)进行确定存储。其他属性reviewMessage(评论内容)、reviewTime(评论时间)。

4.4 用户功能模块代码实现

(1)登陆注册实现:与之对应RegisterDAO 类,里面提供了相应的add、update 等方法在用户注册后实现数据库账号注入的功能,在注册之后RegisterCheck 方法进行用户进行账号注册时的合法性,按情况返回true 或者false 值,在RegisterService 类中声明方法抽象类供RegisterAction 类进行调用。代码中的Login 方法进行从数据库中账号密码进行获取,并进行匹配识别,根据情况返回true或false 值。在登陆时Servlet 端响应方法put(“repMsg”,“登录成功)才可登陆成功,然后通过response.getWriter().print(jsonmsg)将路径返回客户端。

(2)朋友圈实现:朋友圈模块涉及到朋友圈实体类Message 类、朋友圈数据访问类MessageDAO 类、朋友圈服务类MessageService、朋友圈操作类MessageAction、评论数据访问类commentDAO、评论服务类CommentService 以及它们相应的接口。从Action 到Service 到Dao 层层访问,发布的文本及图片信息的更新分别对应方法UpdateMessage()和UpdateImg()。评论模块类似以上方法进行数据库基本调用利用UpdateReview()进行评论消息的更新。

(3)搜索好友实现:用户在Web 端操作后通过Action 层action_flag.equals("search")接着访问Service 层中的search 方法,最后通过Dao 包中的类查询数据库内的数据。

(4)个人资料查看编辑实现:该部分代码实现方法相对简单,通过Action、Service、Dao 层调用,是UpdateUsernamebyId()、UpdateUserpasswordbyId()、UpdateUsersignbyId()等更新方法的基本实现,最后修改数据库内相应的个人信息。

(5)好友请求响应实现:响应方法holder.uname.setText(getUserMessage().getUname()+“请求添加好友”)进行操作判断处理,根据用户是否同意来利用uhobby.SetText()方法进行相应状态修改。

(6)添加好友实现:在ContactNtfMessage 类中的同名方法里获取sourceUserid(请求者id)和targetUserid(响应者id)来实现联系人添加功能,在对方选择同意或者拒绝好友添加时状态改变时,发送方也通过SetText()方法进行状态的修改,与好友请求界面的方法实现响应是同步进行的。

(7)社交实现:系统利用融云提供的推送方式进行社交聊天功能的辅助工具,先预设消息基类BaseMessage,声明getType 方法和toString 方法。发送消息时语音消息类VoiceMessage 与文本消息类TxtMessage 均继承基类进行开发。

本部分是系统开发的核心部分。社交聊天部分基于Socket 通信开发,首先必须建立前后端的Socket 连接,在连接成功后把消息请求传送给后端进行处理,后端就会进行相应处理后再将数据处理结果通过session.SendText()方法推送给前端。这样用户在进入前端界面时,连接就成功建立,在该连接中发送请求就会进行传输。配置完成之可以通过调用后台接口的方式进行后台向前台推送数据。

在发送消息方面采用推送的方法,在发送中如果fromuserid(发送人用户id)、touserid(接收人用户id)和message 均为空时则抛出异常取消连接发送。发送方经客户端将聊天消息发送至服务器上,broadcastpush 负责接受从服务器传来的消息,通过广播方式发送出去。

4.5 管理员功能模块的实现

(1)登录实现:主要涉及的类有管理员实体类Admin、管理员服务类AdminService;管理员数据访问类AdminDAO、管理员操作类AdminAction。

(2)用户信息查看编辑实现:管理员在Web 端进行删除操作通过AdminAction 转向AdminService 中具体Update 方法的实现,通过AdminDAO 对数据库内用户信息进行删除。

(3)投诉处理实现:编写updateFriendState 方法,用户被投诉后此方法将该账号在数据库对应的用户类型属性进行更改(正常账号置“0”,违规账号置“1”),对该用户进行登陆限制。

5 测试分析

5.1 兼容性测试

如表1所示,测试后发现在火狐浏览器进行测试时,虽然页面大小正常,但部分操作按钮显示不同,至今无法解决。这是因为W3C 推出了一个网页规范标准,即Web 标准,火狐浏览器严格遵循这个标准,而ie 浏览器对网页的解析标准与其不同,造成了这样的结果,不影响正常使用。

如表2所示,测试后发现在蓝叠(BlueStacks)模拟器中在运行时项目会报出错误,至今无法解决。经查阅相关资料和进行分析后发现BlueStacks 这个模拟器对系统和电脑配置要求十分挑剔,有时安装成功后未必可以运行软件应用,能否成功还是要看电脑配置和版本兼容性。

5.2 主要功能性能测试

5.2.1 表单验证功能测试

系统的登陆注册模块是涉及到数据安全性和正确性的重中之重,因此这也模块界面的测试尤为重要。测试后在登陆或者注册当用户输入为空时当密码和账号不符时会给出错误提示。

5.2.2 投诉封禁功能测试

投诉封禁功能测试主要测试经其他用户投诉处理的账号是否可以正常登录,对其测试采用多个安全账号和非法账号注入的方法;安全账号注入是用未被投诉的账号密码进行登录,非法账号注入是用已被投诉的账号密码进行登录。测试后安全账号可成功登录,非法账号则被提示“已被封禁”而无法登录。

5.2.3 搜索功能测试

搜索功能测试主要测试系统搜索功能是否得以实现以及搜索结果的合理性,对其测试采用有效信息输入搜索和无效信息输入搜索的方法;有效信息输入搜索是指满足查询条件的记录是存在的,无效信息输入搜索是指满足该条件的记录是不存在的。测试后成功在页面查询到有效信息,而无效信息不显示在页面上。

5.2.4 图片上传功能测试

图片上传功能测试主要测试在空间动态发布和社交聊天中图片能否正常发送,对其测试采用不同大小不同格式图片进行发送,目前图片上传大小限制为30K 并且上传格式仅限于JPG 格式。测试后上传不同格式或者超过规定大小的图片会给出错误提示。

5.2.5 聊天消息响应功能测试

聊天消息相应测试主要测试在用户甲发送消息给用户乙时用户乙提示消息是否响应,消息是否正常接收。经测试在甲未发送消息时乙方正常无响应,在甲发送消息后乙方有类似QQ 的红点提示,正常接收甲方信息,点开阅读后提示即消失。

猜你喜欢

浏览器好友账号
彤彤的聊天账号
施诈计骗走游戏账号
反浏览器指纹追踪
属羊
环球浏览器
如何查看迅雷数字账号
雪花特快专递