(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf_第1页
(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf_第2页
(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf_第3页
(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf_第4页
(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf_第5页
已阅读5页,还剩61页未读 继续免费阅读

(计算机应用技术专业论文)internet上大规模用户即时通讯方法研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京工业大学工学硕士学位论文 摘要 i n t e r n e t 正在飞速的发展。与之同时,在i n t e r n e t 上新出现的一种通讯方 式一即时通讯也在经历爆炸式的增长,并逐渐成为一种i n t e r n e t 上主流的通讯 方式。即时通讯( i n s t a n tm e s s a g e ) ,是指两个或多个在线用户通过i n t e r n e t 实 时的进行信息的传递和交流,具有实时性、跨平台性、成本低、效率高等优点。 建立起一个能够处理大规模用户进行实时、安全的即时通讯架构并将其实现具有 较强的理论和现实意义。 即时通讯的底层通讯通过s o c k e t 字接口实现。当前的主流u n i x 系统和微软 的w i n d o w s 系统都在内核提供了对s o c k e t 字接口的支持。使用这个统一的接口, 可以编写一个可移植的t c p i p 通讯程序。使通讯信息能够在i n t e r n e t 上可靠的 传输。 为了建立一个可靠的即时通讯架构,对循环方式、多进程并发方式、多线程 方式等解决方案分别进行了论述和比较。并着重讨论了多进程并发方式的方案实 现。为了即时通讯架构的可扩展性、可维护性和健壮性,对多进程并发架构使用 分层的方式实现。即按照功能的不同,将服务程序分布于不同的软硬件层次中。 同时,在该架构中使用了服务器推送和进程间通讯等技术来保证大量的即时通讯 用户能够实时、快捷的进行通讯。 由于t c p i p 协议对信息进行的是明文传播。为了防止信息被他人从网上窃 取,设计了一种对称加密( d e s ) 和非对称加密( r s a ) 相结合的方法来对信息进行加 密。为了防止即时通讯架构成为病毒传播的平台,本文说明了如何利用内核可加 载模块来在服务器端进行病毒查杀。 关键词即时通讯;套接字;多进程;加密;内核可加载模块 北京工业大学工学硕士学位论文 a b s t r a c t i n t e r n e th a sb e e n e x p a n d i n gv e r y f a s t a tt h es a m e t i m e ,an e w c o m m u n i c a t i o nm e t h o d ,w h i c hi sc a l l e di n s t a n tm e s s a g e s ,i sf l o u r i s h i n g i ni n t e r n e t ,a n di t i st ob et h em o s ti m p o r t a n tc o m m u n i c a t i o nm e t h o di n i n t e r n e tn o w i n s t a n tm e s s a g e st h a tc a nh e l p p e o p l ee x c h a n g ei n f o r m a t i o n h a v es e v e r a l a d v a n t a g e ss u c ha sr e a l t i m e ,c r o s s p l a t f o r m ,c h e a pa n d e f f i c i e n t t od e s i g na ni m ( i n s t a n tm e s s a g e ) a r c h i t e c t u r et h a tc o u l dd e a l w i t h l a r g e s c a l eu s e r si sv e r yi m p o r t a n ti nb o t ht h e o r ya n dr e a l i s m i n s t a n tm e s s a g eb a s eo nt c p i pp r o t o c o lt h a tis r e a liz e db ys o c k e t i n t e r f a e e a l m o s ta l iu n i x o p e r a t i o ns y s t e m sa n dm i e r o s o f t sw i n d o w s o p e r a t i o ns y s t e m sp r o v i d es u p p o r to fs o c k e ti nt h ek e r n e l u s i n gt h e u n i f o r mi n t e r f a c e ,w ec a n d e v e l o p ap o r t a b l ep r o g r a mo ft c p i p ,w h i c hh e l p u st r a n s f e ri n f o r m a t i o ni nt n t e r n e ts a f e l ya n dc r e d i b l y 。 t oc o n s t r u c tac r e d i b l ei ma r c h i t e c t u r e ,w ed i s c u s sd e f e r e n tm e a n s s u c ha s l o o pf r a m e ,m u l t i p r o c e s sf r a m ea n dm u l t i t h r e a df r a m e a n dw e p a r t i c u l a r l yg i v ea ni m p l e m e n t a t i o no fm u l t i p r o c e s si ma r c h i t e c t u r e t o m a k et h ea r c h i t e c t u r em o r e e x t e n s i v e ,m a i n t a i n a b l ea n ds t a b l e ,w e d i s t r i b u t ed i f f e r e n tf u n c t i o n st od i f f e r e n th a r d w a r ea n ds o f t w a r el e v e l s o nt h eo t h e r h a n d ,w eu s et e c h n o l o g i e ss u c ha ss e r v e r p u l l a n di p c ( i n t e r p r o c e s sc o m m u n i c a t i o n ) t oh e l pi mu s e r sr e a l i z er e a l t i m ea n d q u i c kc o m m u n i c a t i o n f o rt c p i pp r o t o c o ld o e s n t p r o v i d et h es e r v i c eo fd a t as e c u r i t y , o t h e rp e o p l em a yi n t e r c e p tt h ei n f o r m a t i o nt r a n s m i t t e di n i n t e r n e t t o r e s o l v et h ep r o b l e m ,w e d e s i g n as t r u c t u r et h a tc o m b i n e s s y m m e t r i c e n c r y p t i o nw i t hd i s s y m m e t r i ce n c r y p t i o n t op r e v e n tc o m p u t e rv i r u sf r o m s p r e a d i n gi nt h ei ma r c h i t e c t u r e ,w eu s el o a d a b l ek e r n e lm o d u l et ok i l l v i r u si nt h es e r v e r p o i n t k e y w o r di n s t a n tm e s s a g e :s o c k e t :m u l t i p r o c e s s :e n c r y p t :l o a d a b l e k e r n e lm o d u 】e 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得北京工业大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 签名:互逡日期 关于论文使用授权的说明 2 ,口六二、1 0 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的论文在解密后应遵守此规定) 签名:至途 导师签名: 躬卜 第1 苹绪论 第1 章绪论 1 1 我国i n t e r n e t 发展现状 i n t e r n e t 的历史要追溯到2 0 世纪6 0 年代末7 0 年代初的a r p a n e t ,这是美 国国防部高级研究计划局建立的,世界上最早出现的计算机网络。自i n t e r n e t 出现以来,经历了爆炸式的增长历程,现在已经成为一个极为重要的信息源和 通讯手段。自从2 0 世纪9 0 年代中期开始,互联网在我国迅猛发展,网上中文 信息资源快速增长。据中国互联网络信息中心( c n n i c ) 发布的 2 0 0 3 年中国 互联网络信息资源数量调查报告表明,到2 0 0 3 年1 2 月3 1 日,全国在线数 据库达到8 2 9 2 9 个,共1 5 7 0 9 万个网页,2 7 4 4 g 数据量。网上政府信息、行 业和企业信息、科技教育信息、文化娱乐信息、新闻信息、旅游信息、区域特 色信息等均己形成一定规模。全国网民数量达到7 9 5 0 万人,上网计算机数达到 3 0 8 9 万台,w w w 站点数达到5 9 5 ,5 5 0 个,国际出口带宽数达到2 7 ,2 1 6m 。随 着我国i n t e r n e t 的快速发展,上网用户的需求也逐渐多元化,过去的收发邮件、 阅读! j 日页已经不能满足上网用户的需要。即时通讯作为一种实时、快捷的网上 联系,式,已经被越来越多的用户接受。 1 2 即时通讯现状及发展趋势 所谓即时通讯( i n s t a n tm e s s a g e ) ,是指两个或多个在线用户通过i n t e r n e t 实时的进行信息的传递和交流。“。即时通讯所拥有的实时性、跨平台性、成本 低、效率高等诸多优势,使之成为i n t e r n e t 上使用最广泛的网络沟通方式之一。 据预测,按照目前的发展趋势,到2 0 0 5 年即时通讯将成为互联网上最普及的交 流方式。 随着即时通讯的普及,全球即时通讯用户规模也在不断扩大。行业研究机 构r a d i c a t ig r o u p 公司在2 0 0 3 年做过一项预测。标题为 2 0 0 3 2 0 0 7 年间的 即时通讯市场趋势的预测报告称,继电话和电子邮件之后,即时通讯服务正 在全球迅速普及,而且将迅速成为个人间实时通讯的有机组成部分。据 r a d i c a t i 预测,全球的即时通讯服务账户将由目前的5 9 亿增长到2 0 0 7 年的 1 4 3 9 亿,这将使每天发送的即时通讯消息数量由目前的5 8 2 0 亿增长到2 0 0 7 第1 页 北京工业大学工学碗十学位论文 年的1 3 8 0 0 亿,而即时通讯软件市场将由2 0 0 3 年底时的5 8 0 万美元大幅增长至 2 0 0 7 年的2 5 7 0 万美元。 在我国,即时通讯软件也在快速发展。据统计,2 0 0 3 年中国即时通讯软件 的最高在线人数已经突破了5 5 0 万人。随着中国上网人口的增长,以及i m 软件 的不断普及,即时通讯在线人数将保持快速增长。预计2 0 0 4 年国内i m 最高同 时在线人数有望突破7 4 0 万人,到2 0 0 6 年将突破1 2 0 0 万人同时在线。 1 3 课题来源 国家经济贸易委员会、国家发展计划委员会在关于下达2 0 0 2 年国家重点 技术改造项目计划( 第八批国债专项资金项目) 的通知( 国经贸投资 2 0 0 2 5 4 8 号) 文件中立项,并要求由北京金色谷超市管理有限公司负责实旌的项目农 资连锁超市和配送中心,任务是: 采用现代技术实现超市配送一体化; 采用现代交易方式开展多渠道营销,成为农资农副产品集散中心; 成为有影响力的行情发布中心; 成为信息采集发布中心; 引入银行和先进结算系统; 成为权威质检收检定级中心; 成为市场需求的农业科研中心; 成为连结农户与市场的加工中心。 北京工业大学计算机学院承担了农产品物流中心管理信息系统的一期工 程。主要对农产品的加工、采买、库存、销售、配送等信息管理系统进行实现。 同时提供了一个网上平台,为广大的农产品供应商和客户提供一个网上交易场 所。在一期工程中,供应商和客户只能将供货或者需求信息通过i n t e r n e t 发送 到金色谷网站上。由金色谷的员工对这些信息进行处理,再用人工的方式联系 双方,进行交易。当供应商和客户的请求过多时,不仅需要耗费较多的时间而 且金色谷公司员工也要承担很大的工作压力。为了金色谷二期工程的实现,真 正建立一个网上的实时交易市场,需要我们建立一个即时通讯平台。供货商和 客户可以通过这个即时通讯平台,实时的选择合乎兴趣的对象进行交易。为农 产品的流通提供了一种全新的渠道。 第2 页 帚1 苹绪论 1 4 主要研究内容 由上述的即时通讯的现状及发展趋势来看,构架一个即时通讯的框架有着 很大的现实意义。因此,本文主要讨论了如何构建一个即时通讯架构,这个架 构需要具备大规模用户实时、安全、并发的通讯能力。要构建这个框架,需要 考虑和解决以下几个问题: 第一、并发处理多个用户交互的能力。由于i n t e r n e t 的开放性以及越来越 多的联网用户,有可能有数千个、数万个甚至数十万个用户同时在线。这么多 用户进行实时通讯,会对服务器构成极大的压力。特别是实时通讯对反应时间 有着很高的要求,这就要求设计的服务器架构能够快速的处理客户机请求,能 够承担大规模用户的压力,并有着良好的可扩展性,可以随着用户数量的增长 进行扩展。 第二、信息传输的安全问题。信息在i n t e r n e t 上传播时使用了t c p i p 协 议,因为t c p i p 并没有提供信息安全的保证,信息在i n t e r n e t 上传递时很容 易被人截取和监听”3 。为了保正用户信息的安全,我们必须对要传输的内容进 行加密处理,以防止用户信息的泄漏。 第三、程序崩溃后的恢复问题。程序崩溃包扩服务器程序崩溃和客户机程 序崩溃两种。崩溃的原因很多,包括机器重启、程序死锁、无法获取所需要的 资源导致程序阻塞等等。因为客户机和服务器通过i n t e r n e t 连接,当有一方崩 溃后必须要通过一定的机制来通知对方并做出相应的处理。对客户机一方,当 程序崩溃后服务器应该能检测到该状况并将该客户机的状态由在线设置为离 线,并通知给该客户机的所有联系人。对服务器一方,当程序崩溃后所有客户 端应将状态设置为离线,并再服务器重启后重新连接。 第四、用户信息的定位和存储。我们可以把用户信息存储在数据库中,但 由于建立和维护数据库连需要耗费较多的资源,当连接数据库的用户过多时, 性能会受到很大的影响。而一些可以处理大规模用户连接的商业数据库往往 价格十分昂贵。另一个选择将用户信息存放在本地文件中,程序可以实时的从 本地的文件中读取用户信息,另外选择一种免费的或较便宜的小型数据库来备 份数据。但当注册用户达到数十万时,要想快速的定位用户的信息文件并读取 用户信息,就必须提供一种有效的机制。 第3 页 北京工业大学工学硕士学位论文 1 5 论文结构 本文主题部分共分为六章: 第一章是绪论,介绍了本文的现实和理论背景、研究内容和论文结构等。 第二章说明了怎样用s o c k e t 套接字接口来实现i n t e r n e t 上联网机器的 t c p i p 连接和数据传输。t c p i p 协议提供了面向连接( t c p ) 和无连接( u d p ) 两种连接方式。t c p 协议在建立和终止连接时需要进行客户机和服务器的三次 握手,这使它比起u d p 协议开销要大,但u d p 协议不能依赖下层的运输层协议 提供可靠的交付。为了保证信息在i n t e r n e t 上的可靠传输,我们选择使用面向 连接的方式进行数据交互。通过使用s o c k e t 字接口的系统调用,可以实现上述 的要求。本章介绍了s o c k e t 字的基本调用,并给出了利用s o c k e t 字接口进行 通讯的客户机和服务器算法。 第三章讨论了即时通讯循环算法。在此基础上,从响应速度、并发性等指 标上对其优缺点进行分析。并给出了利用异步i o 方式对其进行改进的算法。 第四章是本文的重点。本章介绍了多进程、信息推送等技术。并利用上述 技术实现了一个多进程并发的即时通讯架构。本章详细的介绍了该架构的软硬 件实现方法。并给出了不同模块的具体算法。在项目的具体编程实现中,也是 采用了本章所设计的软硬件架构和算法。列举了在即时通讯中保证其安全性的 技术。主要包括两个内容:第一、如何在即时通讯过程中防止病毒的传播。第 二、如何保证在即时通讯过程中信息不被他人窃听。 第五章介绍了多线程方式对第四章所列举架构的改进。 最后是结论。对本文的内容进行总结。并提出了需要进一步改进的地方和 后续的研究内容。 第4 页 第2 章用s o c k e t 套接字接口来实现t c p i p 连接 第2 章用s o c k e t 套接字接口来实现t c p i p 连接 2 1 什么是s o c k e t 套接字接口 在多数实现中,t c p i p 协议软件驻留在计算机的操作系统中。“。因此,只 要应用程序使用t c p i p 进行通讯,它就必须同操作系统进行交互以申请服务。 从程序员的观点看,操作系统提供的那些例程定义了应用程序和协议软件之间 的接口,即应用接口( a p p l i c a t i o ni n t e r f a c e ) 。实际上,t c p i p 只有少数接 口。在u n i x 系统中,网络应用编程界面有两类:u n i xb s d 的套接字( s o c k e t ) 和u n i xs y s t e m v 的t l i 。1 。由于s u n 公司采用了支持t c p i p 的u n i x b s d 操作 系统,使t c p i p 的应用有更大的发展,其网络应用编程界面一一套接字 ( s o c k e t ) 在网络软件中被广泛应用,几乎所有的主流u n i x 系统都支持它,微 软的操作系统d o s 和w i n d o w s 系统也提供了对s o c k e t 字接口的支持,使其成为 开发网络应用软件的强有力工具。使用s o c k e t 字插口开发网络软件具有可移植 雎强、跨平台、开发简单等优点。开发的程序只要进行少量的修改就可以在不 同的平台上编译执行。异构操作系统之间的通讯也可以通过s o c k e t 字接口实 现。 2 2 与套接字接口一同使用的主要的系统调用 s o c k e t 调用可以分为两族:主调用( p r i m a r yc a l l ) ,它提供对下层功能的 访问;实用例程( u t i l i t yr o u t i n e ) ,为程序员提供帮助。这些调用提供了客户 机和服务器所需的主要功能。以下对这些调用进行列举和描述: 2 2 1s o c k e t 调用 应用程序调用s o c k e t 函数创建一个新的插口,这个新的插口可以用于网络 通讯。该调用返回这个新创建插口的描述符。该调用的指明应用程序使用的协 议族( 例如t c p i p 使用p f _ i n e t ) 以及将使用的协议或它所需要的服务类型( 即, 流( s t r e a m ) 或数据报) 。对一个使用i n e r n e t 协议族的插口,其协议或者服务类 型参数决定了它将使用t c p 还是使用u d p 。 第5 页 北京工业大学工学硕士学位论文 1 1 2 2 2c o n n e c t 调用 在创建了一个插口后,客户机程序调用c o n n e c t 以便同远程服务器建立一 个主动( a c t i v e ) 连接。c o n n e c t 的一个参数运行客户机指明远程端点,它包括 远程机器i p 地址以及协议端口号。一旦连接建立,客户机就可以通过它传送数 据了。 2 2 3w r i t e 调用 客户机和服务器都使用w r i t e 在t c p 连接上发送数据。客户机常使用w r i t e 发送请求,而服务器使用w r i t e 发送应答。w r i t e 调用需要三个参数:数据将 要发往的插口描述符;数据的地址;数据的长度。w r i t e 往往要将出数据复制 到操作系统内核中的缓冲区中,并允许应用程序在通过网络传输数据的同时执 行下去。若系统的缓冲区满,w r i t e 调用会暂时阻塞,直到t c p 可以在通过网 络发送数据并在缓冲区为新的数据腾出空间为止。 2 2 4r e a d 调用 客户机和服务器都使用r e a d 在t c p 连接上接收数据。服务器常使用r e a d 接收客户机调用w r i t e 发送来的请求,而客户机使用r e a d 接收服务器发送的应 答。r e a d 调用需要三个参数:接收数据的插口描述符;接收数据的缓冲区地址: 缓冲区的长度。如果没有数据到达r e a d 调用阻塞,直到数据到达为止。 2 2 5 c l o s e 调用 客户机或服务器一旦结束使用某个插口便调用c l o s e 以便将其撤消。若只 有一个进程使用此插口,c l o s e 就立即终止连接并撤消该插口。若多个进程共 享某个插口,c l o s e 就把插口的引用减l ,由此引用降到零时,就将该插口撤消。 2 2 6 b i n d 调用 当插口被创建时,本地地址和远程地址都没有指定。应用程序调用b i n d 以便为一个插口指明本地端点地址。服务器主要使用b i n d 来指明知名端口号, 它将在此知名端口等待连接。 第6 页 第2 苹用s o c k e t 套接孚接口来实现t c p i p 连接 2 2 71 i s t e n 调用 当插口刚被创建时,它既不是被动的( 准备由服务器使用) ,也不是主动的 ( 准备由客户机使用) 。面向连接的服务器调用1 i s t e n 将一个插口设置为被动 模式( p a s s i v em o d e ) ,并使其准备接受入连接。 2 2 8 a c c e p t 调用 该系统调用由服务器使用。对t c p 的插口,服务器将调用s o c k e t 函数创建 一个插口,调用b i n d 指明一个本地端点地址,调用l i s t e n 将其设置为被动模 式。在此之后服务器将调用a c c e p t 以获取接下去的入连接请求。a c c e p t 的一 个参数指明一个插口,并从该插口上接受连接。 a c c e p t 为每个新的连接请求创建了一个新的插口,并将这个新插口的描述 符返回给调用者。服务器只对这个新的连接使用这个新插口,而原来的插口则 接受其它的连接请求。服务器一旦接受了一个连接后它就可以在这个新的插口 | 二传输数据。在使用完这个新的插口后,服务器将该插口关闭。 2 3 套接字插口的实用例程 在套接字插口编程中,除了上述的系统调用,还有一些实用例程帮助编程 者编写程序。举例来说,插口例程中包括一些在网络字节序和本地主机字节序 进行转换的函数“。所谓本地主机字节序是指变量在本地的存储序列,这些随 着操作系统和主机硬件架构的不同而有所差异。因此相同的数据如果不加变化 的在i n t e r n e t 上的主机问传递,有可能会表示不同的含义。因此在传送过程中, 将数据变为统一的网络字节序,可以有效的防止歧义的发生。由此可见,这些 套接字插口的实用例程可以帮助程序员更加有效快捷的开发t c p i p 程序。 2 4 使用套接字插口编程的算法描述 使用套接字插口编程,有面向连接和无连接两种通讯方式,分别使用t c p 协议和u d p 协议。因为面向连接的方式提供了更好的传输质量保证,而且更为 复杂。下面对使用面向连接的方式进行t c p i p 通讯算法进行简要的描述。 第7 页 北京工业大学工学:硬土学位论文 2 4 1客户机算法 找到期望与之通信的服务器的i p 地址和协议端口号。 分配一个插口。( 使用s o c k e t 系统调用) 指明此连接需要一个在本地机器中的、任意的、未使用的协议端口,允许 t c p 选择这样个端口。( s o c k e t 套接字编程允许客户机自动选择满足条件的该 端口) 将这个插口连接到服务器。( 使用c o n n e c t 系统调用) 与服务器进行通讯。( 使用w r i t e 和r e a d 系统调用来发送请求和等待应答) 关闭连接。( 使用c l o s e 系统调用) 算法2 1 2 4 2 服务器算法 创建一个插口,并将其绑定到它所提供服务的知名端口上。( 使用s o c k e t 和b i n d 系统调用) 将该端口设置为被动模式。( 使用1 i s t e n 系统调用) 从该插口上接受客户机的一个连接请求,获得该连接的一个新的插口。( 使 用a c c e p t 系统调用) 读取来自客户机的请求,构造一个响应,按照应用协议向客户机返回响应。 ( 使用r e a d 和w r i t e 系统调用) 当与某个特定的客户机完成交互时,关闭连接。( 使用c l o s e 系统调用) 算法2 2 2 5 本章小结 本章介绍了即时通讯架构在i n t e r n e t 上进行t c p i p 通讯的基础:s o c k e t 字。详细介绍了s o c k e t 字的来源,使用s o c k e t 字进行网络编程的优越性,以 及s o c k e t 字编程的系统调用和实用例程。最后,给出了使用s o c k e t 字进行网 络编程的客户机和服务器算法。 第8 页 第3 章使用循环的、面向连接的方式实现即时通讯的梨构 第3 章使用循环的、面向连接的方式实现及p n , 3 通 讯的架构 显然,要想实现多个用户的实时通讯最简单的方法是服务器循环等待客户 机的请求。首先,服务器在某个知名端口上等待客户机的请求。当服务器接到 客户机连接的请求后,建立与客户机的t c p 连接,接收客户机要传递的信息并 将其存储在磁盘或数据库中。然后将服务器与客户机建立的连接断开,继续在 该知名端口上循环等待客户机的请求。对于客户机,每隔一个特定时间就连接 一下服务器,如果在服务器端有其它客户机发给自己的信息则将其取回。该架 构实现的伪代码如下所示: 3 1 循环的即使通讯服务器算法 创建一个插口s ,并将其绑定到它所提供服务的知名端口上。 将该端口设置为被动模式,指明等待队列的长度。( 使用l i s t e n 系统调用) w h i l e ( 1 ) 使用a c c e p t 系统调用,如果无客户请求或等待队列为空,则阻塞。 在插口s 上接受客户机的一个连接请求,获得该连接的一个新的插口 s _ n e w 。 使用r e a d 从插口s n e w 上读取客户机的请求。 对获取的客户机请求进行处理 s w i t c h 客户机请求 f c a s e 客户机请求获取其他客户传递的信息: i f 数据库或磁盘文件中存在其他客户发给该客户的信息t h e n 使用w r i t e 将信息传递给该客户 e 1 s e 向客户发送空消息 e n dj f 第9 页 北京工业大学工学硕士学位论文 c a s e 客户机向其他客户机传递信息: 将该信息存入数据库或相应客户的磁盘文件中 c a s e 其它操作: 服务器处理相应操作 c a s ee l s e b r e a k e n ds w i t c h 当与该客户机完成交互后,关闭连接s _ n e w 。( 使用c l o s e 系统调用) e n dw h i l e 算法3 1 3 2 面向循环服务器的即时通讯客户机算法 找到期望与之通信的服务器的i p 地址和协议端口号。 设置定时器,每隔一定的时间间隔连接一次服务器,向服务器取信息。 w h i l e ( 1 ) 接收用户命令。 分配一个插口s 。( 使用s o c k e t 系统调用) 将这个插口连接到服务器。( 使用c o n n e c t 系统调用) 向服务器发送用户命令并接收服务器应答。 关闭插口s 算法3 2 3 3 该架构的优缺点 使用循环的、面向连接的架构实现服务器,其调试、编程、维护和修改是 最容易的。但用循环的方式存在几个较大的缺点: 该服务器一次只能处理一个客户机的请求。当服务器在处理该客户的请求 第i 0 页 第3 章使用循环的、面向连接的方式实现即时通讯的架构 时,另一个请求到达了,系统便将这个新的请求排队。服务器一旦处理完一个 请求,它便查看队列中是否有新的请求需要处理。这样如果同时请求连接的客 户机数目太多,使设计的请求队列的长度小于请求连接的客户机数目,就会造 成请求队列的溢出o “,使服务器拒绝新的客户机请求。即使请求队列设计的足 够大,如果队列中的连接请求过多也会造成服务器对客户机处理响应速度的减 慢。 服务器对客户机的处理是按照连接请求的先后顺序进行,如果服务器在处 理与某个客户机通讯的过程中因为网络故障、客户机当机等问题影响了服务器 的处理速度,都会对处理后续的客户机请求造成影响。 使用该架构,客户机无法知道服务器是否收到了其它客户机发给它的信息, 只能按照设计好的一个时间间隔不停的访问服务器。这样其实并不能说成是一 个严格的实时通讯系统。如果时间间隔定义的较长,客户机获取信息的时间延 误就会很长;如果将时间间隔定义的较短,则服务器要不断的接收到客户机的 请求,会对服务器造成很大的压力,当在线用户较多时甚至会造成服务器的崩 溃。而且,客户机对服务器的访问绝大多数时候并没有信息可取,这样极大的 浪费系统资源。 3 4 使用异步i ,o 的方法对循环服务器算法3 1 进行改进 在算法3 1 中,由于服务器与客户机通过i n t e r n e t 连接,建立连接和接发 数据的时间占据整个处理时间的绝大部分,也就是说服务器往往在等待i o 准 备就绪的过程中阻塞。因此,可以使用异步t o 来增强服务器处理客户机请求 的并发性。即让一个服务器对多个客户机打丌它们的t c p 连接,并使服务器 在数据到达时处理该连接。要实现异步i o ,可以通过系统原语s e l e c t 来实现。 即服务器为它管理的每一个客户机的t c p 连接创建一个插口,然后调用s e l e c t 等待任一连接上的数据到达。u n i x 提供了集合数据类型f d s e t 以及对集合处 理的宏f d z e r o 、f ds e t 、f d _ i s s e t 以及f d _ s e t s i z e 。“。服务器可以将为主插 口和为每个客户机创建的插口放入集合中,并调用s e l e c t 系统调用对集合中的 所有插口进行监控。如果集合中有某个插口准备就绪,则s e l e c t 系统调用返回, 并通过系统提供的对集合操作的宏来判断是哪个插口准备就绪,对该插口进行 操作。 第1 l 页 北京工业大学工学硕士学位论文 异步i o 提供一种能力,这种能力使得当一个i o 条件满足时,进程能够 及时得到这个信息。异步i o 一般应用于单个进程需要处理多个描述字的场合。 它的一个优势在于,进程不是阻塞在真正的i o 调用上,而是阻塞在s e l e c t0 调用上,s e l e c t0 可以同时处理多个描述宇,如果它所处理的所有描述字的i o 都没有处于准备好的状态,那么将阻塞;如果有一个或多个描述字i o 处于准 备好状态,则s e l e c t0 不阻塞,同时会根据准备好的特定描述字采取相应的i 0 操作。 通过使用异步i o 的方式对算法3 1 进行改进后,可以增强服务器处理客 户机连接的并发度,加快响应速度。但其仍然需要客户机定时的从服务器“拉” 取数据( p u l l ) ,不能从根本上解决算法3 1 的缺点。另外,使用异步i o 方式 的服务器仍然是单进程服务器,当服务器端使用多c p u 主机时,无法利用硬件 和操作系统提供的并发能力。因此,算法3 1 和使用异步i o 对其改进的算法, 只能适应于同时在线人数规模不大的情况。 3 5 本章小结 本章介绍了如何使用循环的方式来实现即时通讯架构。给出了使用循环的 方式构建的即时通讯服务器的算法,并分析了其优缺点。最后,讨论了如何采 用异步i o 的方式来改进循环的即时通讯服务器。 第1 2 页 第4 章多进程并发的即时通讯架构的方案实现 第4 章多进程并发的即时通讯架构的方案实现 4 1 进程和多进程并发编程 4 2u n i x 系统中进程的概念 进程是正在执行的一个程序的实例,通常是由程序,数据集合和进程控制 块( p r o c e s sc o n t r o lb l o c k 简称p c b ) 三个部分组成o “。程序部分描述了进程 所要完成的功能。数据集合包括两个方面的内容,即程序运行时所需要的数据 部分和工作区。进程控制块含有进程的描述信息和控制信息,是进程动态特性 的集中反映,它是系统对进程进行识别和控制的依据。 进程和程序有着显著的区别: i 、程序是静态概念,本身可以作为一种软件资源长期保存:而进程是程序 的执行过程,它是动态概念,有一定的生命期,是动态地产生和消亡的。 2 、进程是一个能独立运行的单位,能与其它进程并发执行,进程是作为资 源申请调度单位存在的,而通常的程序段是不能作为一个独立运行的单位的。 3 、程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方 面,一个进程在活动中有可顺序地执行若干个程序。进程不能脱离具体程序而 虚设,程序规定了相应进程所要完成的动作。 4 3 使用多进程方式进行编程 由于u n i x 系统是分时多用户系统,c p u 按时间片分配给各个用户使用,在 实质上应该说c p u 按时间片分配给各个进程使用,每个进程都有自己的运行环 境。u n i x 系统的时间分片( t i m es l i c i n g ) 机制试图在所有的进程问平等的分 配c p u 提供的处理能力”1 ,如果不考虑进程的优先级,假设某个单处理计算机 上有n 个进程有待执行,那么每个处理器将各自会获得1 n 的c p u 处理时间。 当某个进程用完分配给它的时问片后,操作系统进行调度,通过进程间切换将 下一个时间片分配给另一进程,这样在单处理器计算机上也可以得到多进程并 行执行的能力。对于多处理器计算机,各进程共享c p u 处理能力,在每个c p u 上都各自有着不同的进程实时的并行执行,并通过操作系统时间分片机制在各 个c p u 上进行调度。进程间的切换包括三个层次:用户数据的保存、寄存器数 第1 3 丽 北京工业大学工学硕士学位论文 据的保存和系统层次的保存“。以便于该进程再一次得到c p u 时间片时能正常 运行下去。多进程程序具有一些突出的优点:并行化、简单有序、互不干扰、 事务化。 利用u n i x 操作系统多进程并行执行的能力,可以将一个复杂的问题分解成 可并行执行的简单的小问题,然后使用多个进程并行的完成这些简单的小问题, 最终来解决这个复杂的问题。进行多进程编程,可以采用一个父进程使用f o r k 调用产生多个子进程的方式。父进程与子进程关系如下: 子进程是由另外一个进程所产生的进程,产生这个子进程的进程称为父进 程。 子进程继承某些父进程的环境,但子进程作为几个独立的进程也有它自己 的环境。 在u n i x 系统中,使用系统调用f o r k 创建进程。f o r k 复制的内容包括父进 程的数据和堆栈段以及父进程的进程环境。 进程共享父进程的文本段即代码段。父进程和子进程以并行的方式执行同 一程序的不同分支。 在即时通讯架构的服务器实现中,在同一时刻,有多个客户机并行通讯。 显然,可以利用u n i x 系统中多进程并发的方式创建多个进程对多个客户机进行 处理,使一个进程来处理一个客户机的请求。这样,就可以利用操作系统的并 发机制来实现客户机的并发通讯。 4 。4 多进程编程方法的示例 为了在u n i x 中创建一个新进程,程序就要调用系统函数f o r k 。“f o r k ”的 意思就是一分x _ - ,把当前进程复制出一个新的进程。当前的进程就是新进程 的父进程,新进程称为子进程。本质上说,f o r k 将运行着的程序分为两个完全 样的进程,每个进程都在相同的代码中执行相同的地方。着两个进程继续执 行,就像是两个用户同时启动了该程序的两个副本。 举例如下: # i n c l u d e t t i n c l u d e ( s t d i 0 h m a i n 0 第1 4 页 第4 章多进程并发的即时通讯架构的方案实现 i n ti : f o r k0 :创建一个新的进程 f o r ( i = 1 :i 0 ) 如果p i d o 说明返回子进程的p i d 号,执行父进程的代 码 p a r e n t sc o d e : e l s ei f ( p i d = = 0 ) p i d = o 表明是子进程,执行子进程代码 c h i l d sc o d e : e l s e p i d o说明创建新进程失败 第1 5 页 北京工业大学工学硕士学位论文 e r r o rh a n d l i n g : 离。 这样并发程序利用f o r k 的返回值决定如何执行下去,实现了父子进程的分 4 5 多进程并发方式的服务器算法 使用多进程并发的方式实现t c p 服务器,可以采用2 3 1 3 中所使用的父 子进程分离的方法。主服务器进程( 即父进程) 并不与客户机直接通讯。它 只是在知名端口上等待下一个连接请求。一旦有请求到达,系统就返回用于该 连接的新插口的描述符。主服务器进程创建一个从进程( 即子进程) 来处理该 连接,并允许从进程并发操作,而父进程继续在该知名端口上等待客户机的请 求。其进程结构如图所示: 服务器 应用进程 操作系统 图4 一l 多进程并发服务器 f i g u r e4 - 1 :m u l t i p r o c e s sp a r a l l e ls e r v e r 如图4 一l 所示,系统中任意时刻都有一个主进程和零到多个从进程。主进 程接收客户端的请求,根据请求生成从进程处理该连接;在主进程没有收到客 户端的请求时,阻塞于a c c e p t 系统调用,一旦客户端有新的连接请求到达,则 唤醒主进程对新的请求进行处理。每个从进程维护一个与客户机的连接,当该 第1 6 页 第4 章多进程并发的即时通讯架构的方案实现 从进程与客户机通讯完毕后,由该从进程负责断开与客户机的连接,并终止本 身的执行。 算法4 1 简单的描述了多进程并发的服务器算法的实现: 主1 创建一个插口并将其绑定到所提供服务的知名端口上 主2 将该端口设置为被动模式,使其准备为一个服务器所用。 主3 重复调用a c c e p t 以便接收来自客户机的下一个连接请求,并创建一 个新的从进程来处理响应。 从1 由于接收一个连接请求( 即,在用于连接的插口上收到) 而被创建。 从2 用该连接与该客户机进行交互,读取请求并发回响应。 从3 关闭连接并退出。在处理完来自一个客户机的所有请求后,从进程就 退出。 算法4 1 4 6 在即时通讯中使用长连接方式推送信息 4 6 1长连接和短连接 t c p i p 通讯模式下有两种连接模式,即长连接和短连接。“。它们的定义分 别如下所述。 短连接( s h o r tc o n n e c t i o n ) :通信双方以客户一服务器方式建立t c p 连接, 应答与请求在同一个连接中完成。系统采用客户服务器模式,操作以客户端驱 动方式发起连接请求,完成一次操作后关闭此连接。 长连接( l o n gc o n n e c t i o n ) :通信双方以客户一服务器方式建立t c p 连接, 用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间c 发送链路检测包以维持此连接,当链路检测包发出超过时间t 后未收到响应, 应立即再发送链路检测包,再连续发送n - 1 次后仍未得到响应则断开此连接。 参数c 、t 、n 原则上应可配置,现阶段取值为:c = 3 分钟,t = 6 0 秒,n = 3 。 在下面的服务器推送技术的描述中,我们可以看到使用长连接在即时通讯 架构中的优越性。 第1 7 页 北京工业大学工学硕士学位论文 4 6 2 在即时通讯中使用服务器推送方式的优越性 服务器推送( s e r v e rp u s h ) :推送技术的基础思想是将客户机主动查询信息 改为服务器主动发送信息。服务器发送一批数据,客户机显示这些数据,同时 保证与服务器的连接。当服务器需要再次发送一批数据时,客户机显示数据并 保持连接。以后,服务器仍然可以发送批量数据,客户机继续显示数据,依次 类推。 客户端拉拽( c l i e n tp u l l ) :所谓的c l i e n t p u l l ( 以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论