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

时间:2015-03-26 11:17 来源:www.fabiaoba.com 作者:贾殿燕 点击:
  摘  要 即时通讯系统已经成为人们日常生活中必不可少的交流工具,随着HTML5的兴起以及富客户端应用的发展,基于WEB的即时通讯系统已经成为互联网应用的一种发展趋势。本文的目的在于探求一种能同时容纳数千万人同时在线的高性能即时通讯解决方案。本系统前端为了开发出美观、友好的系统界面,采用成熟的Extjs框架,这样还可以降低开发成本;后端则采用高性能服务器Tornado处理用户请求,数据存储使用MySQL数据库持久化存储用户数据,并利用Redis数据库作为消息缓冲区,来优化系统。客户端采用AJAX技术,主动定时的拉取服务器上的最新数据。从实际使用上看本系统较强的鲁棒性,良好的可扩展型,并且具有较低响应时间,较高系统的吞吐量和用户的并发数。 
  【关键词】软件工程 即时通讯 Tornado Extjs AJAX 
  从1994年以色列人发明IM(Instant Messaging即时通讯)的鼻祖“ICQ”到1999年腾讯推出QQ,再到今天的微信,IM已经成为互联网上最大的应用之一。IM的出现改变了现代人的交流方式,如今IM不仅成为人们日常交流的工具,更成为企业与用户交流的重要渠道。随着HTML5的兴起以及基于WEB的富客户端应用技术的飞速发展,国内外对基于WEB的IM也有了相当多的研究和应用。 
  本文介绍的基于Tornado的即时通讯系统,前端采用Extjs框架,后端使用Tornado作为服务器,通过Ajax技术进行客户端与服务器间的通讯;通过需求分析,概要设计,详细设计等环节完成整个系统的设计。并利用Redis作为缓存来优化系统的响应时间,提高系统的吞吐量和用户的并发数。 
  1 需求分析 
  即时通讯系统是一个在线交流的工具,它应该能够方便的进行更新、升级、与其它系统集成。它应该尽可能的提高用户满意度。它的用户可以分成两类:管理员和普通用户。因此对于管理员应该能对系统进行有效的管理;对于普通用户,在线交流是最重要的功能,他们之间能够进行一对一、多对多等方式进行交流、互传文件,还应该能够查询自己与其他人的通讯记录。 
  2 总体设计 
  2.1 系统目标 
  根据需求分析,即时通讯系统应实现以下目标: 
  (1)为了避免下载安装以及软件升级的麻烦,本即时通讯系统采用B/S架构; 
  (2)要求较高的用户并发数,能够满足千万级别的用户同时在线交流;低时延,不能让用户在相互的交流中感到系统的卡顿; 
  (3) 要求系统具有良好的可扩展性,能够透明的增加或减少服务器的数量,能够简便的把该即时通讯系统集成到其他系统中; 
  (4) 具有较强鲁棒性,当机器发生磁盘故障、网络过载时能够保证系统的稳定性和数据的完整性。 
  (5)系统界面友好、美观,降低用户使用时的学习成本。 
  2.2 系统环境 
  对于开发环境,本系统在Linux系统下,采用Python语言进行开发;运行在Linux操作系统上,使用开源的Tornado作为Web服务器;客户端使用Extjs框架,javasript脚本语言开发,运行于浏览器上,如Chrome,Firefox,IE等。 
  Tornado是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本,它和现在的主流 Web 服务器框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时Web服务来说,Tornado 是一个理想的 Web 框架。 
  Extjs可以用来开发RIA也即富客户端的AJAX[3]应用,是一个用Javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端AJAX框架。 
  2.3 系统架构 
  本系统所有服务器都采用多机热备,这样可以提高系统的鲁棒性;采用Redis内存数据库作为用户消息的缓存,用户通讯的过程中发送和接受消息就可以直接从内存中读取,不用每次都去读写磁盘为了提高系统的吞吐量和用户并发数;为防止因断电等原因造成的用户消息丢失,专门设计一个模块用来异步数据备份到MySQL数据库。系统的架构如图1所示。 
  3 系统实现 
  3.1 功能实现 
  根据需求分析,本系统可为7个功能模块,各个模块的具体功能如下: 
  (1)发送消息,用户发送消息到服务器,又分为普通发送和群发消息。 
  (2)接收消息,用户从服务器接收消息,又分为普通接收和群接收消息。 
  (3)检查消息,检查是否有发送给该用户的新消息。 
  (4)查看通讯记录,查看与某个用户的聊天记录。 
  (5)建群,用户新建一个群,用来多对多聊天。 
  (6)修改个人信息,用户可以修改自己的昵称,密码,个性签名,头像等信息。 
  (7)添加、删除用户,管理员添加、删除用户。 
  系统功能结构图如图2所示。 
  在以上7个功能模块中,接收消息是最为复杂,下面给出接收消息的客户端处理流程图,如下图3所示。 
  当客户端户利用AJAX定时向服务器发送请求,通过HTTP拉取技术,来检查是否有发送给用户的消息。服务器通过查询数据库来判断,然后把结果返回给客户端。当有新消息时,客户端会立即请求新消息,服务器再次查询数据库,取到客户端需要的消息,发送给它。 
  从上面的分析可以看出,客户端需要频繁的向服务器发送请求,而对于每个请求,服务器都要查询数据库才能得到想要的结果,对于即时通讯系统来说,同时在线人数越大,服务器的访问数据库的次数也就越多,服务器的IO压力也就随之增加,因此系统IO将会成为即时通讯系统的瓶颈,所以要想实现千万人同时在线的即时通讯系统,对这个IO优化是非常关键的一步。

www.fabiaoba.com),是一个专门从事期刊推广期刊发表、投稿辅导、发表期刊的网站。
  本站提供如何投稿辅导、发表期刊,寻求论文刊登合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级论文刊登/国家级论文刊登/ CSSCI核心/医学投稿辅导/职称投稿辅导。

投稿邮箱:fabiaoba365@126.com
 在线咨询: 投稿辅导275774677投稿辅导1003180928
 在线咨询: 投稿辅导610071587投稿辅导1003160816
 联系电话:18796993035

联系方式
李老师QQ:发表吧客服610071587 陈老师QQ:发表吧客服275774677 刘老师QQ:发表吧客服1003160816 张老师QQ:发表吧客服1003180928 联系电话:18796993035 投稿邮箱:fabiaoba365@126.com
期刊鉴别
  • 刊物名称:
  • 检索网站:
热门期刊
发表吧友情提醒

近来发现有些作者论文投稿存在大量剽窃、抄袭行为,“发表吧”对此类存在大量剽窃、抄袭的论文已经停止编辑、推荐。同时我们也提醒您,当您向“发表吧”投稿时请您一定要保证论文的原创性、唯一性,这既是对您自己负责,更是对他人的尊敬。

此类投稿的论文如果发表之后,对您今后的人生和事业将造成很大的麻烦,后果不堪设想,请您一定要慎重,三思而后行。

如因版权问题引起争议或任何其他原因,“发表吧”不承担任何法律责任,侵权法律责任概由剽窃、抄袭者本人承担。

 
QQ在线咨询
论文刊登热线:
137-7525-9981
微信号咨询:
fabiaoba-com

友情链接

申请链接