1、浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用摘要当今流行的即时通讯系统有MSN、Yahoo Massager、ICQ、QQ、Google Talk 等,但是这些!M系统基本都定位于个人用户,面向最广泛的群体,在商业应用 中如果想要给本行业客户提供个便利、集中的沟通和联系平台则这些!M就显 得力不从心。本文所描述即时通讯系统来源于我们给家商务旅游公司开发的 IM系统。用户主要针对导游、旅行社、宾馆、个人等。提供旅游询价报价、即 时通讯、语音聊天、P2P视频聊天、P2P资料传送、客户分类管理、专业用户群 聊等功能。和普通的IM系统所不同的是,这个系统上的用户都是旅游行业内的 专业客户,
2、所以不论是宾馆、旅行社还是导游或有旅游意向的个人用户都可以方 便地在本IM系统中找到对应的服务和客户群,进行旅游咨询、询价报价等操作。本文设计和实现了客户端和服务端程序框架,以及整体即时通讯网络协议。客户 端程序的当前版本已经商用并实现了上述的所有功能。本文首先列出了项目的需求和现实背景。第2章分析系统的架构设计,服务 端的架构本文针对系统用户连接多的特点采用了多线程并发服务的模式并提出 如下设计:根据RFC2778把服务端分成Notification Service Switchboard Service 2个互相独立的服务模块,可以配置到不同的服务器上提供多用户连接分 布式服务,降低了对单
3、个服务器的硬件要求,分流了用户连接。针对用户的安 全性和扩展性要求,设计了 MD5和随机数组合加密的方式来保证用户数据的安 全。同时在网络协议中加入版本自动升级功能来实现系统扩展和定制。对于异 构网络P2P连接建立的问题,提出通过服务端交互节点信息的方式来穿透防火墙 和NAT最终建立P2P连接。商用IM系统的关键技术在于大规模用户环境下服务端的稳定和客户端在各 种软件系统环境和网络条件下的系统健康度上。本文第3章对系统实现所需的关 键技术进行探讨并确定方案,首先在服务端的设计上针对半连接和死连接消耗服 务器资源的问题提出2种解决方案:定时清楚缓冲池中死连接和定时发送数据包 来消除半连接,从而保
4、证了服务端程序的稳定。其次视频和语音的原始数据量巨 大不适合网络传送,本文引入了 H263和G711协议用程序实现视频和音频数据 的压缩和解压缩并在网络上做P2P传送。本文第4章是系统的实现与应用,为 了在不同版本的Windows下做到通用,我们在实现中尽量采用了通用的API和 类库,并设计了一个客户端崩溃处理模块来收集系统出错时客户端所在机器的堆 栈信息和操作系统信息,根据这些信息来协助本IM系统的改进。最后,本文总结了本系统的特点和应用前景,并提出了可能改进的发向。关键字即时通讯、点对点、可定制、多线程服务、防火墙穿透浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用ABSTRACT
5、MSN、Yahoo Message ICQ、QQ、Google Talk etc are nowadays most popular Instant Message System,But these Systems focus on the personal customers all over the world,provide a place for these people to chat.If we want to use these IM System in business and provide a place for professional custom in same in
6、dustry to negotiate or consult about the industry related information,then we found that the IM system above can not support such function.In this paper we bring a IM System come from a project we do for a business trip company,it mainly focus on Hotel Travel Cicerone n Tourist.And provided them tra
7、vel consulting、instance chat、p2p Audio&Video chat document transfer group chat and so on.In this system all the customers are travel industry related,so users can easily find the services or customers they need and talk to each other.I responsible for designing the architecture of the total system a
8、nd then implement it.The latest version of the client which included all the functions above has been used in business environment.We first talk about the projects requirement and background.In Ch2 we analysis the system architecture,about the server architecture there are two design methods.For the
9、re are large user connections in the system,we decide to user the multi thread service architecture and bring out some design:divide the service into Notification Service and Switchboard Service according the RFC27788 to shunt the user connection flows to distributed servers.use the random number co
10、mbine with MD5 method to make sure the security of the users data in the network.in the establish of the P2P user connection.We use the server to exchange the P2P peers information to bypass the firewall and NAT in different network environment.A business IM System need to make sure The Server relia
11、ble under huge users and the client need to run steadily under different software and network environment.In ch3 we discuss the key technique in the system and choose the right method,first we delete the dead connection in the user connection pool and send query network packet timely to every connec
12、tions make sure there are no half-connections in the pool.then for the origin video and audio data are large and can not transport in network directly,we import the H263 and G711 protocol to encode and decode the data to send to different peers in network.Ch4 is mainly about the system implementatio
13、n and usage,we use the general APIs and lib to make sure that our client can use in different version of Windows,and we also design a client crash report module to collect the stack info and Windows information when there is a error and then send to us,we can use it to improve the performance of the
14、 systemAt last this paper sum up the features if the system and bring out the future of it.And discuss the parts that can do better.Key wordsInstant Messaging、P2P、Custom-Builtx Multi-Thread Service、Bypass Firewall浙江大学顽土学位论文潘练武:可定制即时通讯系统研究与应用第一章绪论1.1 引言即时通讯(Instant Messaging)在过去人们印象中就是个可以让人们在网上 聊天、交友
15、的互联网软件,不过现在IM工具的功能越来越强大,所涉及的领域 也越来越广。当前的IM系统已经不再仅仅是个人们休闲时候聊天的工具,很 多情况下已经替代了 Email、电话的部分功能,并开始使用在商务环境下。即时 通讯工具已经从时的时尚发展成为了一种富有价值的通讯工具,在许多公司每 天的业务运作中发挥着重要的作用。许多公司使用即时通讯工具不仅仅是为了发 送即时信息,还是为了加强各个项目中的合作,交换数据,并且建立一个连接多 个子公司网络的通信平台。IBM软件事业部所推出的企业内部实时通讯软件Lotus Samtime,在台湾的 客户包括有联电、台积电及工研院等大型机构和企业。而!BM本身也是企业实
16、 时通讯软件的受惠者之一,据统计,经由实时通讯软件所节省下来的国际电话费 及差旅费,每个月可省下四百万美元,如果再加上完整的Lotus Dynamic Workplaces等解决方案,每年可为!BM节省四亿美元的企业支出川。诸如甲骨 文、Sun、微软等软件公司也都在提供企业级即时通讯软件或协作服务,雅虎公 司已经于03年2月底开始正式推出其企业版产品。这几家公司都深信自己的能 在这个领域能够大显身手。在国内,目前企业QQ大多数的用户存在于IT企业中,一方面是这些企业 的硬件设施比较好,企业员接受新事物的能力也比较快,QQ企业版有外来用 户与内网用户的交流限制,并且有整个企业内部通讯解决方案,使
17、得同一部门之 间可以单独讨论而不受其它部门的影响、用户可以互相传送文件、支持手机短信 等等功能,为企业办公提供便利。从这个角度来看,企业QQ还是可以给客户提 供些比较实惠的功能。上述的IM系统和人们所熟知的MSN、QICQ.1CQ Yahoo Massager又有 很大不同。上述IM系统一般应用于企业内部用来节省商务支出,也可以应用在 同行业专业用户中用来提供个集中进行行业相关商务活动的平台。所以日常人 们所使用的MSN等并不能完全提供这些商务功能,需要根据不同行业的商务特 点来对1M系统做出定制从而符合客户的需求,对可定制IM系统的讨论已经成 为近期非常活跃的话题。1.2 即时通讯系统IM(
18、Instant Messaging)是即时通讯的缩写,作为使用频率最高的网络软件,即时聊天已经突破了作为技术工具的极限,被认为是现代交流方式的象征,并构-5-浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用建起一种新的社会关系。它是迄今为止对人类社会生活改变最为深刻的种网络 新形态,没有极限的沟通将带来没有极限的生活。互联网诞生于传统的电话网络,通讯交流可以说是互联网天然的应用之一。电子邮件就是最重要的通讯交流工具,是互联网最早的“杀手级应用、此后兴 起的网络论坛和网络聊天室都是网络聊天的前身。但是,个人对个人网络聊天的 真正崛起还是需要从ICQ的传奇故事开始。虽然,互联网是典型的美国
19、产物,但是与万维网由欧洲人发明一样,ICQ也 不是美国人的杰作。对于没有专家指导、也没有受过专门教育和培训的四个犹太 年轻人来说,能够在三个月内发明ICQ这个在因特网上掀起风暴的新技术,应 该说是个奇迹。髙徳菲因格等四名20多岁的发明人(Yair Goldfinger(26,Chief Technology Officer),Arik Vardi(27,Chief Executive Officer),Sefi Vigiser(25,President),and Amnon Amir(24),),最初的种子基金是向其中一位的父亲借贷 的,并在美国硅谷开始了创业历程。后来,美国在线公司三年内,分
20、两次共向其 投入4亿多美元,使ICQ技术得到进步发展和完善。2001年5月,全球ICQ 的用户就已经达到了 1亿。ICQ源自以色列特拉维夫的Mirabils公司(成立于1996年7月)。Mirabils 这个单词是拉丁文中神奇的意思。ICQ就是英文“I SEEK YOU”简称,中文意 思是:我找你。这是款网络即时通讯软件,支持在互联网上面聊天、发送消息、网址及文件等功能。在你上网时,用ICQ可以很快的找到你的朋友,当然他也 必须装上这个软件。美国在线AOL购买下!CQ以后推出功能更加强大的99a、99B 2000等版本,内建了个搜索器,另外连网页的制作都可以由ICQ独立完 成,不用另寻免费空间
21、就可以使用,当你使用时进行适当的设置你的电脑就成了 个服务器,网友们通过您的电脑就可进入到您的主页参观。几种主要即时通讯工具:QQ:国内最时髦的即时通讯工具当数腾讯的QQo它为用户提供寻呼、聊 天、新闻等信息,还有手机上的移动QQ服务,现在QQ已经升级到2006版。MSN:软件巨头微软开发了 MSN Messenger 把MSN Messenger嵌进了 Windows XP操作系统里。有即时消息、表情符号下拉列表、语音对话、视频会 议、文件传输、blog等功能。另外还有最近刚推出的Google Talk等,这些!M系统基本功能类似,然后 软件开发商各自提供了一点与总不同的特点。除了这些通用的
22、IM系统,另外还 有一些企业IM和行业相关IM系统,这些!M系统由于需要一些行业相关的商 务特性来支持,所以这个要对通用的!M系统做些定制来满足企业的要求。本 文下面描述的就是个旅游行业的即时通讯系统,提供了旅游相关的服务咨询和 有旅游需求的客户群。6浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用1.3 项目介绍本系统来源于实际项目,定位于商业客户,是一家商务旅游公司提出需要这 样个即时通讯系统。主要客户针对他们公司加盟的宾馆、旅行社、导游、游客。提供个集中的平台来让他们交流,游客可以在上面査找到意向旅游线路的旅行 社并做咨询,旅行社和宾馆之间也可以进行商务沟通、询价报价等。这样通用
23、的 IM比如QQ,MSN就不能满足他们的需求,他们需要的是个有旅游行业特点的 即时通讯系统。1.3.1 系统实现方法介绍开发个旅游行业相关的IM系统,有一个选择就是在个通用的IM系统 上做2次开发,但是当前流行的比如QQ、MSN等聊天工具都是商业软件,其 通信协议和2次开发接口都是非公开的,所以本文一开始就决定从零开始实现这 个系统。设计个IM系统首先就是要决定网络通信协议,在这一部分RFC中 并没有关于IM的个统标准,但是有一个RFC2778可以作为设计IM协议的 参考,同时对于网络多连接并发服务器的设计当前已经有了几种比较成熟的设 计。最终我采用的是多线程服务负责用户连接的方式。数据安全实
24、现在】M系统使用过程中,有多处涉及用户的隐私数据,比如登陆密码、询价 报价等等,这些数据都要求通过网络传递。那么基于安全性考虑,必须加密之后 再发送,然后收到之后解密。常用的加密算法有MD5、DES、RSA等,DES的 安全性由密钥的保密来保证,而RSA算法无论用软件还是硬件来实现其速度都 是瓶颈。由于本系统需要一个对称的加解密算法同时不需要有密钥,所以本文选 择了 MD51481作为数据加密算法,所有敏感数据将在加密之后发送。其次无论采取何种加密算法,在用户登陆过程中始终还有一个安全性问题存 在:他人可以使用Ethereal3)等软件来分析!M的通信协议并得到里面的数据,虽然无法将加密过后的
25、登陆密码解密得到原始密码,但是可以根据这个加密数据 本身就可以直接登陆服务端。本文在MD5加密数据的基础上再增加连接随机数 加密,每次用户登录服务端,服务端给本次连接分配一个随机数并通知客户端,然后客户端就可以将密码和随机数组合之后用MD5加密发送给服务端验证,这 样即使每次密码样其密文也是随机的,这样就大大增加了安全性。P2P连接穿透防火墙实现-7-浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用P2P程序是近几年在互联网上兴起用来共享数据的种程序,如Bt、eMule 等。传统的数据共享方式一般都是C/S结构的如Ftp Server这种方式由于资源 都集中在一台服务器上,由此对服务器
26、的硬件配置和网络带宽有较高的要求,而 P2P程序则是点对点上的数据传送,某个用户完成数据下载之后甚至下载之中就 可以把已经下载到本机上的数据共享,这样类似无序扩散式的下载方式使得用户 的下载速度大大提升。互联网上的总多个人电脑要想用P2P的方式共享数据,关键就是互相建立 网络连接,而某些防火墙默认拒绝来自陌生IP的连接请求,比如A的防火墙只 接受曾经和A发生数据交互的!P,所以B如果想和A进行P2P传送,那么B向 A发起连接请求会被A拒绝,而A向B请求连接才能成功穿透A的防火墙。所 以要想成功建立P2P连接必须交换节点之间的信息本文通过用服务端程序 交换P2P的双方节点信息,逐次协调之后在双方
27、建立网络连接。另外很多公司 对外的IP都是同一个,内部局域网都是通过内部!P区分,这样如果想和其中某 台机器建立P2P连接,那么就需要通过网关的NAT解析得到正确的地址在做连 接,本文通过服务端交换客户端位置信息的方法来引导客户端之间的P2P连接 成功建立,在第2章中会做详细分析。多线程并发服务实现IM系统需要支持大量用户同时在线,所以服务端设计成分布式多线程并发 服务的模式来有效利用服务器硬件资源和网络带宽,本文设计了 Notification Service和Switchboard Service来分别提供用户操作服务和用户通讯服务,这2 个服务程序可以部署在不同的服务器上,从而分流了用户
28、连接并有效利用了现有 资源。每个服务程序均设计成主线程循环监听用户连接,然后线程缓冲池负责服务 具体用户连接的模式。一旦客户连接到服务端,那么就会从缓冲池中得到个可 用线程来负责这个客户的操作。另外所有共享的资源比如已存在客户连接的数据 在本文中被设计成Hash table的形式提供多线程访问,所有线程必须占有互斥锁 可以访问这个Hash table协议解析实现IM系统客户端和服务端的网络交互都是按照一定的格式进行数据交换的,这个格式都是即时通讯系统的通信协议。不同的用户操作对应不同类型的网络协 议内容,比如添加好友和增加群分别就是ADD和ACG命令,不同的协议命令 需要服务端有一个Parse
29、r来解析这些网络数据,得到命令的类型和对应的参数再 回调不同的处理函数来负责用户的操作。解析器生成可以使用flexor bison叫 3ntM2引等工具,flex和bison对于CH的支持不尽人意,antlr则本身就是个面-8*浙江大学倣士学位论文济练武:可定制即时通讯系统研究与应用向对象的解析器生成工具。本文使用antlr磔】来生成解析协议所需的Parser。首先用正则表达式(Regular Expression)和上下文无关语法来描述!M通信协议的语法,然后在这些文法的触 发部分加上对应文法的回调函数,最后用antlrmJ来生成ch格式的Parser。这个 Parser将被服务线程调用,用
30、来解析Socket收到的数据包,分析成不同的命令之 后回调对应的处理函数。视频、音频压缩、解压缩实现本文采用VFW采集摄像头的视频数据,以图像帧的形式存放在系统缓冲之 中,这些原始数据在现有的网络条件下如果直接发送由于数据量太大在对方显示 图像时会有严重的延时,所以需要对原始数据压缩之后再做发送。本文用H263 算法阿对视频数据进行压缩发送,并对收到的对方视频数据进行解压缩之后用 于客户端显示。音频的压缩算法本文采用了 G711(51),具体流程同视频压缩算法H263。客户 端使用这2个协议实现了视频、音频数据的压缩、解压缩用于P2P视频和语音聊 天。1.3.2系统主要特点集中的商务用户用户可
31、以査询所有加盟的宾馆、旅行社、导游并加为好友,进行商务沟通。同时针对各种商务关系比如个人和宾馆、旅行社和宾馆等系统提供特殊的服务:比如某个人想去某地旅游可以在网站提出宾馆报价,即时通讯服务端可以把这个 报价群发给宾馆用户的IM客户端。同时有些商务关系可以要求加密比如联系方 式和价格信息等。该公司加盟的旅行社、宾馆等已经有数千家之多,所以对于其 中的用户来说不管是做旅游咨询还是找目标游客都是笔丰富的资源,用户可以 轻而易举得得到专业用户的服务。比如旅行社用户可以专门按照线路来开个 群,这样游客可以自由加入并得到信息。便利的沟通方式:在这个IM系统中用户之间可以通过即时消息、文件传送、语音聊天、视
32、频 聊天等多种方式联系。也可以多个用户申请开个群进行集体交流,比如游客组 团等。管理员的角色一般由该商务旅游公司成员担任。公司还可以根据客户需要 群发消息:比如一个游客需要在他的目的地订个宾馆,那么系统可以向当前在 线的该地宾馆用户群发消息,游客还可以限定条件比如星级要求、价位要求、地 点信息等。-9-浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用可扩展的通信协议:本系统在实施过程中由于需求要求以后便于扩展功能模块,所以在网络协议 设计时就考虑将基本服务搭成一个框架平台,而功能点都做成命令调用形式,所 有的命令都分成几种基本类型,并在解析完成之后转发命令到服务实现模块,所 以要扩展功
33、能只要针对功能点要求增加对应的命令,然后在解析过程的回调中增 加该命令的功能处理模块即可,这种设计在后来的项目实施中给我们带来了极大 的方便。1.4论文结构本文第一部分是绪论,提出了项目的实际背景和客户需求,然后对即时通讯 软件的历史做了一番回顾。接下来第二章主要关注系统架构设计,首先是模块化并发服务端设计部分。主要描述了服务端的几个组成模块比如Notification ServiceSwitchboard Service Http Servicex Protocol Command Parse Service 接着是客户端设计主 要着眼于客户端在不同软件环境和网络条件下运行的稳定性和可靠性,
34、如C/S和 服务端通信的质量的保证,P2P客户之间连接的建立和防火墙的穿透等。本章的 最后是对IM系统网络通信协议的分析,分为协议安全性设计、客户端版本升级 和兼容性考虑、协议可扩展性设计、P2P节点连接建立和防火墙穿透设计。然后第三章主要提出了本系统的关键技术分析和特色,本系统商用的关键在 于服务端在大规模用户连接下要保证稳定,无内存泄露和安全性等。而客户端则 主要难点在于?2P的多媒体通讯如点对点的视频、语音聊天等内容。系统特色 主要是行业相关的用户群、协议扩展比如根据客户需求可以方便得在网络通信协 议上增加命令来做到可定制。第四章系统实现与应用主要阐述了系统实现中的关键部分,比如服务端协
35、议 的解析和命令的转发到不同的模块、用户分组和系统査询的数据结构的分析、HBO浏览器进程的注入(要求在浏览器上做出某些操作时系统对不同的操做要有 不同的反应)、程序崩溃报告模块等。还有一些功能点的实现的描述。最后第五章对全文的内容进行了总结,从理论和项目在实施过程中碰到的问 题出发,总结出本文所描述的!M系统的优点和可以改进的地方,并接下来做出 了应用前景的展望。浙江大学硕士学位论文潜练武:可定制即时通讯系统研究与应用第二章系统架构设计2.I 模块化并发服务端设计2.1.I 服务端设计综述本IM系统的服务端需要支持至少数百人同时在线,这样就要求这些连接的 稳定和相互独立,对服务端的稳定性要求比
36、较。个经常由于程序内存泄露和崩 溃而导致客户端无法连接的服务程序会轻易让客户失去信心,从而造成潜在客户 的流失。对于C/S结构的服务端程序来说,一般其监听程序可以分为2种:单进程轮询方式伪代码如下:线程1While(State)(Sid=Accept();/Z等待客户连接连接成功之后返回AddSidToSelect(Sid);把客户连接加到另外一个线程的select函数中)线程2While(Stote)Initial PartSelect(SID_SET);等待在用户连接集合中的socketFind the sid;找到本次有数据交互的socketDispatch(sid);转发 socket
37、 然后处理)这种单进程轮询方式就是把所有已经连接的客户Socket放到select函数中,然后等待其中某个Socket有读或写的信息的时候函数返回,这样的优点是不 用给每个用户连接开个线程,节省服务器资源。但是缺点是可能用户响应比较 慢,比如一个用户Socket发送数据之后,Select函数返回去处理这个发送过来的 数据,这个时候其他Socket的数据处理就是要等到该用户处理完毕之后再回来 Select才能得到反馈,这样大大影响了用户的交互性。多线程可并发性服务伪代码如下:-it浙江大学硕士学位论文潘练武:可定制即时通讯系统研究与应用While(state)Sid=Accept();等待用户连
38、接Thread_Start(Sid);给该用户连接开个线程去交互。这种多线程处理用户连接的方式是一般有大规模用户连接的服务端程序所 采用的。优点是对客户端反应及时,并易于程序扩展和编写,每个客户连接之间 互相独立。缺点就是由于是多线程程序,那么在线程之间处理共享数据时需要注 意线程之间的同步。最终我们釆用了多线程服务端的设计,同时根据RFC2778网我们将服务端划 分成 Notification Service(NS)Switchboard Service(SB)、Protocol Command Parser 3大模块,而为了便于管理员管理服务端又加了 Http Service,这样管理员可
39、以通 过Http的方式来直接登录到服务端做些操作比如增加用户注册等。同时这些 服务模块可以任意组合,放在个服务器上使用,可以拆分到不同的服务器上,这样可以减少硬件负担。比如NS和SB是2个不同的线程,而且各自有自己的 main函数,那么可以在另外一个程序中同时启动这2个线程让他们在一台服务 器上服务,也可以让他们用自己的主函数启动到不同的机器上。Protocol Command Parser是个协议处理中心,需要把客户通过网络传送过 来的一切数据按照IM通信协议解析成独立的命令之后然后转发给不同的命令处 理函数。服务端的主要框架如下所示:-12-浙江大学硕士学位论文潘练武:可定制即时通讯系统研
40、究与应用2.1.2 Notification 服务Notification Service主要用于管理用户连接时的状态信息比如用户个人属性 的动态修改和更新、好友管理如增加、删除好友、用户分组操作、用户登录过程 服务、信息搜索服务等。其主要流程可以用下述的状态机来表示:图 2-2 Notification Service 状态机模型(State Machine)基于安全方面和可扩展性的考虑,整个Notification Service划分成如上的10 个状态,用户连接在服务端的操作必须按照这个状态进行,如有错误比如当前状 态在STATE_VER正在进行客户端版本验证时候,而此时客户端发送过来的
41、要求 进入STATE_LOG状态而跳过STATE_USR状态,那么服务端就会把该用户连接 判断为非法并将该用户连接进入STATE.ERR状态从而结束连接。以下是状态描 述-STATE_BEGIN初始状态默认状态,每次 Notification State Machine线程默认状态就是 STATE_BEGIN,然后当监听的Notification Service线程得到个用户连接之后就 启动个Notification State Machine来处理这个连接,直接进入状态浙江大学硕L学位论文潘练武:可定制即时通讯系统研究与应用STATE_BEGING,等待用户进步要求。STATE_VER版本验
42、证状态C/S模式的程序都有一个普遍存在的问题就是客户端的升级,当増加或修改 某些功能点之后,那么就会推出新的客户端版本,而大量用户已经在使用的客户 端版本要求仍能使用或者得到自动更新,于是就有了这么个状态,每次用户登 录的第一件事情就是判断客户端当前版本是否和当前服务端最新版本一致,不 致那么就进入S1ATE_APT状态。一致那么继续登陆的下个状态STATEUSRo-STATE_APT版本验证状态这个状态是客户端更新状态,如果在STATE_VER中返回状态不一致,那么 服务端会回送个新版本的可下载URL,然后客户端程序自动从这个URL下载 新版本客户端,同时关闭本身程序然后自动运行新版本的安装
43、。STATE_USR用户验证状态这个状态用户将用户名发送至服务端,服务端判断该用户是否存在,不存在 则转至STATE_ERR状态,存在则发送个随机数给客户端,然后进入 STATE_LOG 状永。STATE_LOG用户登录状态收到服务端随机数之后,把这个随机数和密码组合之后用MD5加密发送给 服务端,而服务端用上次存下的随机数和密码用MD5加密之后和客户端发送过 来的数据对照判断密码是否正确,正确则进入下状态STATE_SYN,不正确那 么进入STATE-ERR。此处随机数的用处在于如果有人用网络应抓取软件得到用 户用MD5加声过后的密码,如果不存在随机数的话,那么每次用MD5加密的 结果都是样
44、的,那么就可以不必知道原来密码,只用这个加密过后的数据就可 以通过服务端验证,从而造成安全上的隐患。STATESYN同步状态同病态,由于用户可以在不同机器上登录同一个帐号,并做出操作比如增 加了一个好友,而系统由于出于速度上的考虑把客户的好友关系和分组信息都在 本地机器做了缓存,如果同步操作发现本地和服务器上数据一直那么直接进入 STATE_CHG状态,不一致说明本地记起伤的好友关系和分析信息不是最新那么 要从服端做一次同步更新。-STATE_CHG登录状态设定用户登录之后默认状态是现在在线,不过可以设定成其他比如离线、电话、忙碌、离开等状态,用户可以设定以某状态登录,这个STATE/HG就是
45、向服务 端表示用户登录的初始状态。然后进入STATE_PNG状态。STATE_PNG获得好友状态本状态主要是客户端向服务端发送请求,要求知道他所有好友的状态信息,服务端在这个状态向客户发送其好友的状态信息,发送完毕之后进入 STATE PAR 状态。浙江大学硕士学位论文海练武:可定制即时通讯系统研究与应用STATE_PAR循环状态这个阶段就进入了循环等待客户操作阶段,用户可以根据协议发送各种命令 到服务端,然后做出各种操作如好友的增加删除、好友的分组管理、群的増加删 除加入推出操作、个人信息的管理、用户状态的设定。STATE_FIN结束状态用户可以通过推出命令使State Machine来到这
46、个状态,这个是正常推出的状 态,到达这个状态之后,本State Machine线程就自动结束并关闭客户连接。STATE_ERR出错状态本状态是岀错状态,可以由各个状态跃迁过来比如用户不存在、密码错误、网络错误、协议错误等引起,到达这个状态那么本线程就关闭然后断开客户连接。2.1.3 Switchboard 服务Switchboard Service主要是用户在通过Notification Service验证之后再登录到 Switchboard Service,在这个服务主要提供用户之间的即时聊天、群体聊天然后 还有一些P2P之间节点信息的交互这样可以通过这个让2个客户端得到对方的 信息之后连接
47、起来,还可以穿透某些防火墙设置,然后用户建立连接进行P2P 的视频、语音、文件传送。连接建立之后Switchboard Service就不再管这些内容,让客户端自己去做数据的交互。Switchboard Service的State Machine如下:图 2-3 Switchboard Service 状态机模型(State Machine)根据Switchboard Service的功能,划分为上述6个状态,各个状态的描述如 下所示:-STATEBEGIN初始状态默认状态,每次Switchboard State Machine线程默认状态就是 STATE一BEGIN,然后当监听的Switch
48、board Service线程得到个用户连接之后 就启动个Switchboard State Machine来处理这个连接,直接进入状态浙江大学欣士学位论文潘练武:可定制即时通讯系统研究与应用STATE一ANS,等待用户进步要求。STATE_ANS用户验证状态用户在登录完Notification Service之后得到了 Switchboard Service的位置信 息,然后开始登录Switchboard Servicec服务端根据该用户在Notification Service 中的信息来验证这个登录是否满足安全性要求。如果符合则进入循环等待状体如 STATE_MSG和STATE_MMG,
49、不符合那么进入STATE_ERR并结束本线程和关 闭用户展结。STATE MSG循环状态这个阶段就进入了循环等待客户操作阶段,这个阶段用户可以向好友发送文 本消息进行聊天,也可以在群中发送消息给群里面的好友(这个服务端负责转发 给群中的各个好友)。STATE_MMG循环状态这个阶段就进入了循环等待客户操作阶段,在这阶段下主要是用于客户端的 P2P节点连接的建立,客户端可以通过服务端得到对方的节点信息比如IP、本次 P2P连接的端口、P2P操作类型等。这样双方可以通过服务端的协调来建立连接 并进行数据交互。-STATE FIN结束状态用户可以通过推出命令使State Machine来到这个状态,
50、这个是正常推出的状 态,到达这个状态之后,本State Machine线程就自动结束并关闭客户连接。STATE_ERR出错状态状态是岀错状态,可以由各个状态跃迁过来比如用户不存在、网络错 误、协议错误等引起,到达这个状态那么本线程就关闭然后断开客户连接。2.1.4 Http 服务为了便于管理员管理这个系统,我们增加了 Http Service模块,这样管理员 可以通过Http方式登录系统,然后对系统做管理工作比如增加/删除用户等。Http Service主要由2部分组成:首先是HttpServer类,这个类提供容器的作 用,实现了 Http Service,可以在这个容器的基础上放管理员实现的