基于XMPP的即时通讯系统的设计与实现

2017-09-03 10:13程化梅
电子设计工程 2017年15期
关键词:聊天记录即时通讯好友

程化梅

(武汉邮电科学研究院 湖北 武汉430000)

基于XMPP的即时通讯系统的设计与实现

程化梅

(武汉邮电科学研究院 湖北 武汉430000)

在信息时代,通讯成为人们日常生活必不可少的重要组成部分,而科技的发展也使我们的通讯方式变得越来越简单和普及,给我们的生活带来了巨大的方便。本文首先介绍了XMPP协议的工作原理,并且说明了其优势,然后给出了一套基于XMPP的即时通讯系统设计方案,将其部署在MySql数据库下,以java为编程语言,实现了即时通讯。经测试,本系统实时性好、使用方便、稳定性好,值得推广使用。

通讯系统;XMPP;Java;数据库

在这个快节奏的时代,互联网对人们的生活带来了极大的便利,人们的交流方式不在局限于面对面的交谈或者周期漫长的书信,通信方式越来越多样化而且越来越简单。即时通讯是随着网络技术的高速发展而兴起的一种新的通讯方式,具有极强的实时性、非同步互联网通讯作为通信的主流之一性、互动性等特点。即时通讯无疑是在互联网时代下最流行的通讯方式[1]。主流的即时通讯例如腾讯QQ、微信等,它们以即时、可靠、视频通话、语音通话等特点而大受欢迎。

目前,即时通讯的应用十分普及,不仅有专门的聊天软件供人们使用。甚至很多主流的手机APP都引入了即时通讯的功能,例如新浪微博、百度贴吧的私信,支付宝的聊天功能等。将通讯系统进行拓展和引入新的业务,或者把它嵌入到其它软件系统中,已成为即时通讯软件发展的新趋势。因此,本文设计了一个基于XMPP协议的即时通讯系统,该系统可以让用户之间进行实时的聊天交流,使用起来十分简单,实用性很强。

1 XMPP协议

XMPP是一种网络即时通信协议,它的前身是Jabber协议。它是一种基于XML的协议,它继承了XML协议的灵活性和扩展性。因此,基于XMPP协议的应用也具有极强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求。XMPP还包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。尽管XMPP并没有指定任何特定的网络架构,但通常情况下,它是采用客户端-服务器的架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。也就是说在大多数情况下,当两个客户端进行通讯时,它们之间的消息都是通过服务器传递的。采用这种架构的目的,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就会简单很多。XMPP将复杂性从客户端转移到服务器端。这使得客户端的程序编写变得非常容易,更新系统功能也同样变得容易。

XMPP中定义了3种角色:XMPP客户端,XMPP服务器和网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录、连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等。以下是XMPP架构的抽象的示意图(单向箭头表示使用 XMPP通讯,双向箭头表示可使用任何协议通讯。)如图1所示,其中Client1,Client2,Clinet3 是 XMPP 客户端,Sever1,Sever2 是XMPP服务器,Gateway1是一个XMPP和外部(非XMPP)消息网络之间进行 “翻译”的网关,ForeignNet1是一个外部消息网络,ForeignClient1是外部消息网络上的一个客户端。

图1 XMPP的网络架构

XMPP协议的通讯并非点对点的通讯,而是客户端到服务器再到客户端的方式,它们之间通信时传输的是XML文件,一个简单的XMPP通讯流程可以归纳为:

1)客户端连接到服务器以后,客户端通过IO流发送一段XML文件,文件中包含了客户端的用户名和密码;

2)服务器接收客户端发来的XML文件,获取其中的用户名和密码并对其进行验证,若验证通过,服务器会给客户端发送一个XML文件告知登录成功;

3)客户端登录成功后,会给服务器发送一个获取好友名单的XML文件,服务器会以XML文件的形式发送给客户端好友名单;

4)客户端可以向任意一个好友发送消息,客户端发送的信息先发送到服务器,服务器再转发给好友,好友即可收到。

2 基于XMPP的即时通讯系统的研究与实现

从目前已有的通讯系统来看,XMPP作为IM(Instent Messaging)即时通讯方面的成熟协议,已被FaceBook、Twitter、网易POPO等知名的通讯工具所应用,并且具有非常好的发展前景[2]。XMPP协议是自由的、源码开放的。服务器端有类似OpenFire这样的开源项目,客户端有smack等基于Java的软件开源协议包,开发人员可以直接使用这些开源工程,在必要时做一定的修改,这大大的减少了项目的开发难度。

文中研究的是在Android使用XMPP协议进行即时通信,所涉及3个主要的东西:OpenFire、Smack和spark,它们结合起来就是完整的XMPP即时通讯系统的实现[3]。这里简单介绍一下它们作用:

OpenFire主要是作为服务器,管理客户端的通信连接,并提供客户端一些通信信息和连接信息。

Smack主要是对XMPP协议的实现,它提供了一套API,所有实现XMPP的操作都是通过使用Smack的API来实现,在Android里,使用的是Asmack这个包,这个包的作用与与Smack是相同的[4]。

Spark是客户端的实现,它其实就是使用了Smack的API实现的。

它们三者之间的关系如图2所示。

图2 XMPP通讯系统的关系图

在本即时通讯系统的设计中,采用Java语言来编写项目程序。Java是一门面向对象、跨平台的语言,其多线程与网络编程机制是内置的,在编写完成后可以运行在任何装有Java虚拟机的平台上,正是因为它的跨平台性,用Java语言编写的项目也有了更强的可扩展性[5]。

2.1 数据库

即时通讯系统的数据库至少要包括的数据表有,管理员表、用户表、聊天记录表、文件表等。数据库的数据是根据实时的用户信息而变化的,当用户数据发生了增删改查时,后台也会对数据库里的数据做出相应的更改,例如新增好友时,用户的好友表也会新增一条数据。由于Java是通过JDBC以统一的接口访问和操作各种数据库系统的,而且支持的数据库系统种类非常多,MySql、Oracle、SQL Server等主流数据库应用都十分广泛[6],功能也十分强大,优点也各不相同。本系统采用的是MySql数据库,MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的占用系统资源。

2.2 服务端

在使用XMPP协议的即时通讯系统中,服务器充当的是XMPP通信的一个智能抽象层[7],它主要负责对受验证的客户端,服务器以及其他实体之间以XML流形式的连接和会话进行管理。并在这些实体之间使用XML流对合理编址的XML节进行路由管理。大部分XMPP兼容的服务器也负责存储客户端使用的数据[8](比如基于XMPP协议的及时消息中的联系人名单),那么此时,XML数据直接由服务器来处理,而不需要转发到其他的实体。

服务端应该包括的主要功能有:账户管理(注册、登录、注销)、好友管理(新增好友、删除好友)、消息管理等[9]。

下面是完成于Openfire服务器的连接和设置一些配置的代码:

2.3 客户端

大部分客户端是通过TCP连接直接连接到服务器的[10],并且通过XMPP获得由服务器以及联合服务器所提供的全部功能。多个不同资源(比如不同的设备和地点)的客户端可以同时登陆并且并发的连接到一个服务器[11],每个不同资源的客户端通过XMPP地址的资源标识符来区分。XMPP客户端与服务端通过XML在TCP套接字的5222端口进行通信,而不需要客户端之间直接进行通信[12]。

客户端的核心功能包括账号管理:注册、登陆、退出、用户信息管理,好友管理:增加、删除好友、更改昵称、备注好友,聊天管理:聊天、聊天记录存储。做客户端的账号管理部分时,首先最重要的是登录模块,登录的安全性决定了整个系统的价值。系统对登录的账号和密码做出判断,只有在本系统上注册过得用户才可以登录该通讯系统,用户或者密码不匹配的用户无法进行后续的操作,这保障了该通讯系统的安全性。并且普通用户登录后进入的界面和管理员的界面是不同的,他们都有各自能使用的功能和权限[13]。在好友管理模块,用户可以对自己的好友修改备注名,这样即使用户的好友们更改了自己的昵称,或者不同的好友恰好使用了相同的昵称时,用户可以根据自己修改的备注名直接找到自己想聊天的好友,而系统也不需要把用户昵称作为用户的唯一标识了。最后,在聊天管理模块,用户点击一位好友头像就可以和自己的任何一位好友发起一个聊天会话,他们的聊天记录也保存在这个会话中,这样一来,用户和每一位好友的聊天记录都保存在他们彼此的会话里,用户与每位好友的聊天记录都是单独的,当其中一方删除了聊天记录以后,数据库的记录并不会删除,所以另一方的聊天记录也是存在的,这样聊天管理起来也会变得十分简单和方便。

如图3所示是一个聊天的页面。

3 系统测试

本次系统测试从普通用户和管理员两个不同的方面对所有涉及到的功能模块进行了测试,以保证顺利走通每一个流程。首先从用户这一方进行测试,测试用户的注册登录功能,确保用户的权限安全性,比如注册时,后台验证该账号是否已被注册,登录时后台验证账号密码是否匹配,若已经登录则保存在一个session会话中[14],在规定时间内不需要重新登录。其次就是验证处理信息的准确性,例如实时的收发消息,根据账号精确找到相应用户来添加好友、删除好友时解除好友关系以及会话权限。其次,从管理员这一方进行测试,测试管理员的权限,登录时后台要判断是管理员还是普通用户,管理普通用户的信息,除了用户可以更改自己的信息以外,管理员也有权限更改用户的一些信息,例如禁止用户发言或者禁用用户的账号。最后是对一些非常规操作的测试,用户甲删除了好友乙以后,乙的好友列表里也不再有张三这位好友,这样做的优点是,当甲删除乙以后,甲没有和乙会话的权限,而乙的好友里没有甲以后,乙也就无法向甲发起一个会话,避免了这种无效会话的产生。依据最后的测试结果表明,本系统满足实时、方便、安全、稳定的特性,达到了设计的目的。

图3 用户的聊天记录截图

4 结束语

文中主要介绍了一个基于XMPP协议的即时通讯系统的设计和实现,并从几个主要的模块进行了讲解。经过系统的测试证实,本系统可以用于即时通讯,并且稳定性较好,操作方便。同时由于Java语言面向对象的特性,当增加或修改功能时,都不需要对原系统进行大量的修改。而XMPP的典型的C/S架构,简化了客户端,将大多数工作放在服务器端进行,当增加功能时,多数是在服务器端进行[15]。从而使所开发的软件结构合理,软件重用性好、易于维护与扩充。

[1]李锐.浅谈即时通讯工具现状及其发展趋势[J].中国科技信息, 2013(16):86.

[2]张逸炎,任品毅,李凡.移动终端即时消息推送系统的应用开发[C].第十七届全国青年通信学术年会论文集,2012.

[3]李立亚,徐荣,潘晓燕.即时通信软件用户状态管理策略与方法[J].电脑编程技巧与维护,2011(10):96-98.

[4]白鹤,欧阳峰,赵明,等.基于Jabber/XMPP扩展协议的文件共享发布系统 [J].广播与电视技术.2012(5):15,44-47.

[5]张艺.基于WebSocket的即时通信系统研究与实现[J].软件, 2015(3):89-94.

[6]张建平.基于Android校园即时信息系统研究[J].电子设计工程,2013(20):117-120.

[7]黄伟敏.基于XMPP协议的Android即时通信系统设计[J].电子设计工程,2011(8):57-59.

[8]钱海钢.基于即时通信技术的图书预约系统[J].科技情报开发与经济,2013(16):18-21.

[9]林妍.局域网内即时通讯系统的设计 [J].中国新通信, 2013(12):8,13.

[10]李光明.应用SOCKET实现网络通信[J].煤炭技术, 2012(3):88-90.

[11]谢智明.JAVA语言SOCKET机制的研究[J].湖南科技学院学报, 2011(4):70-72.

[12]谌颃.一种多功能网络即时通讯系统的设计[J].网络安全技术与应用, 2014(11):62,65.

[13]钟桂凤.基于Android平台的食谱资讯管理系统的分析设计[J].技术与市场, 2014(12):34-35,38.

[14]张冲,刘涌,杨海波,等.移动社交网络实时通信机制的研究[J].计算机系统应用,2014(2):205-208.

[15]李新路.XMPP协议在Android即时通讯系统中的应用[J].电脑知识与技术,2013(28):6268-6270.

Design and implementation of instant communication system based on XMPP

CHENG Hua-mei
(Wuhan Research Institute of Posts and Telecommunications,Wuhan 430000,China)

In information age,communication has became a necessary part of our life,however the development of technology makes our ways of communication easier and universal,the Internet as one ofthe most popular communications has brought great convenience to our life.This paper at first introduces the principle of XMPP protocol,and gives a design of instant communication based on XMPP, deploys it in MySQL database, with java programming language, and achieve instant messaging.Through the test , it is concluded that the system has the feature of real-time, easy to use, good stability,and should be introduced.

communication system;XMPP;Java;database

TN914

:A

:1674-6236(2017)15-0162-04

2016-08-04稿件编号:201608030

程化梅(1991—),女,湖北天门人,硕士研究生。研究方向:通信与信息系统、互联网。

猜你喜欢
聊天记录即时通讯好友
退群可选保留聊天记录?微信的聊天记录究竟在哪儿
储存聊天记录用掉两个半三峡水电站电量
一键备份手机QQ聊天记录
属羊
民事诉讼中即时通讯记录的证据采用进路
删除好友
即时通讯软件发展模型的实证研究
两种基于Windows系统的QQ聊天记录删除恢复方法比较
科学技术哲学视域下的即时通讯
即时通讯软件WhatsApp