陌生人—移动社交网络应用App设计

2016-06-16 20:15王狄
电脑知识与技术 2016年10期
关键词:服务器端开源陌生人

王狄

摘要:该系统旨在实现两部分功能。即通过解密陌生人客户端让用户实现摇一摇在地图上显示好友进行互动添加。和提供丰富的交流手段如语音,图片等使用户更为便捷的通讯。同时采取多进程的方式,主进程为前台进程,辅进程为后台推送进程以达到在客户将程序退出时仍然能够从服务器端获取信息。通过定义单独的服务类来处理和openfire服务器的连接问题从而实现解耦。通过定义单独的manager类来提供与即时通讯相关的方法实现解耦。通过维护全局的application类来提供某些常用方法以实现解耦。

关键词:设计;系统

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)10-0092-02

1 绪论

1.1 开发背景及意义

随着人们的生活的丰富化,社交软件成为生活中必不可少的一部分,但是近些年新兴起的基于陌生人之间通讯的社交软件却越来越火爆,陌陌就是其典型的代表。随着陌陌的上市,SoLoMoGlo(Social + Local + Mobile + Global)的概念也在持续升温,成为大学生创业的选择之一。本项目通过游戏的形式完成陌生人之间的交友,进而实现基于陌生人的社交通讯。

1.2 开发目标

SoLoMoGlo(Social + Local + Mobile + Global)概念这些年中持续发酵,基于移动社交的商业模式层出不穷,相关产品众多。

2 陌生人-移动社交网络App设计概述

2.1 设计目标

1) 新用户可以直接点击注册按钮来进行注册,注册完成后自动登陆。

2)登陆后可以点击侧滑菜单中的摇一摇进行好友的添加。

3)添加好友成功后可以直接进行文字语音的聊天并可分享图片。

4)点击侧滑菜单中的我的信息查看当前登陆账号的信息。

5)联系人界面或者聊天界面点击好友头像可查看好友的具体信息。

2.2 模块划分

3.3 详细设计

3.1 系统总体层次设计

本系统采取了C/S软件架构,即大家所熟知的客户端/服务器体系结构,通过将任务分配到Client端与Server端从而降低了系统通讯的开销。

服务器端采用了开源的Openfire服务器,Openfire采用Java开发,基于XMPP的实时协作的IM跨平台服务器。Openfire还提供了完善的后台管理功能,可以更加方便的管理系统用户。

而在客户端中,用户间的通讯是通过服务器的转发来实现的,将信息打包成XML文件发送给服务器,然后服务器转发给相应的用户。在ASmack库的支持下,XMPP客户端的登陆,消息收发等基本功能需要重写相应的函数,并且调用相应的接口来实现。

客户端采用MVC的软件架构,采用Android的XML文件对界面进行描述,作为视图层V(View),负责前台界面的显示;Activity活动类承载了控制层C(Controller)的任务,通过Activity进行逻辑业务的处理;对于处理数据库与处理服务器相关操作属于M(Model),该层具体上依赖于自定义的服务类。

3.1.1 服务器端的层次结构设计

XMPP服务器采用的是开源的Openfire服务器,这个开源的项目应用看apache的mina框架作为NIO框架。简单来说Openfire服务器在mina框架的基础上建立了一个简单的服务器,用来发送基本的IO数据流,然后把接受到的IO解析为XML文件,后通过XMPP协议对接收到的XML文件进行操作。

3.1.2 客户端的层次结构设计

3.2 系统数据库设计

系统采用的是C/S架构,所以客户端本地也要进行数据的持久化,所以系统的数据库设计分为客户端和服务器端。

3.2.1 服务器端数据库的设计

由于服务器端采用的是开源的Openfire,它的数据库端已经有了良好的定义,并且支持外部数据库。在本程序中我们没有使用Openfire内置的数据库,而是采用了Mysql,主要是为了开发时查询数据的方便以满足实际需要。Openfire数据库主要用来存储用户注册的信息,用户的名片信息以及联系人信息。

3.2.2 客户端数据库的设计

因为相关功能的需求,客户端也要对一些数据进行本地的存储。借助安卓内置的Sqlite数据库,我们可以高效地完成它。

客户端数据库主要用来存储联系人信息和聊天信息。系统通过安卓sqlite包里面提供的api可以很便捷的操纵数据库。

3.3 系统关键点简介

1)对远程服务的实现(aidl)

在清单文件中对IMService服务配置为多进程

通过onBind返回远程的binder对象,每次在程序中通过绑定服务来获取binder对象,从而获取XmppManager的远程接口对象(实例)来进行对服务器的操作。

通过在XmppManager类中定义所有的方法来实现对服务端的解耦。

2)对各类数据(聊天记录,联系人列表的获取监听本地数据库)

通ContentResolver对数据库进行操作更好的减轻了由单纯监听带来的各种问题。

3)登陆模块的实现

登陆模块分为前台登陆和后台登陆两部分

前台登陆中保存当前登陆用户的信息,然后开启相应的服务进行后台登陆。所有过程放在异步任务中执行。后台登陆与前台登陆大致相同。

4)百度地图相关

在全局的application类中对百度地图的监听进行实现,具体代码如下:

public class MyLocationListener implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation location) {

}

}

* 设置得到位置后的回调监听器

* @param listener

*/

public void setGetLocationListener(getLocationListener listener){

this.listener = listener;

}

* 得到自己位置信息的监听器

* @author fsc

public interface getLocationListener{

* 得到百度地图api返回的位置信息后的回调

* @param location 当前自己拼装的位置信息

* @param errorCode 百度地图返回的错误码,根据错误码判断定位是否成

public void getLocation(String location,int errorCode);

}

参考文献:

[1] android文档[EB/OL]. http://www.androidcommunitydocs.com/.

[2] 部署以及运开源项目[EB/OL].http://blog.csdn.net/shimiso/article/details/8816558.

[3] openfire[EB/OL].http://www.igniterealtime.org/.

[4] android-flat-button[EB/OL]. https://github.com/hoang8f/android-flat-button.

[5] Shimer[EB/OL]. https://github.com/facebook/Shimmer.

猜你喜欢
服务器端开源陌生人
Linux环境下基于Socket的数据传输软件设计
五毛钱能买多少头牛
浅析异步通信层的架构在ASP.NET 程序中的应用
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
开源计算机辅助翻译工具研究
一种基于Java的IM即时通讯软件的设计与实现
谨防陌生人
谨防陌生人
网页防篡改中分布式文件同步复制系统