《UNIX网络的服务器程序设计方法5555.docx》由会员分享,可在线阅读,更多相关《UNIX网络的服务器程序设计方法5555.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、UNIXX网络的的服务器器程序设设计方法法(刘凯刘刘春旭,四四川大学学计算机机学院)摘要:介介绍了几几种网络络操作模模式和UNIIX下基于TCPP/IPP协议的的网络客客户/服务器器模式的的程序架架构。重重点对客客户/服务器器模式中中服务器器程序的的几种设设计方法法进行了了讨论。关键词:客户/服务器器,Socckett,进程程,并发发服务器器1引言言11几几种网络络模式的的介绍对等网络络(PeeertoPeeer)模模式不需需要专用用服务器器,每一台工作站站都能充充当网络络服务的的请求者者和提供供者,都都有绝对对自主权权,也可可以互相相交换文文件。这这种类型型的网络络软件被被设计成成每一个个实
2、体都都能完成成相同或或相似的的功能。服务器(SerrverrBassed)模模式以服服务器为为中心,严严格地定定义了每每一个实实体的工工作角色色,即网网络上的的工作站站无法在在彼此间间直接进进行文件件传输,需需通过服服务器作作为媒介介,所有有的文件件读取,消消息传送送等也都都在服务务器的掌掌握之中中。客户/服服务器(Cliientt/Seerveer)模模式(有有时也称称为主从从式Massterr/Sllavee)指将需需要处理理的工作作分配给给客户端和和服务器器端处理理,所谓谓的客户户和服务器器并没有一定的界界限,这这取决于于运行什什么软件件,简单单的讲,客户是提出服务请求的一方,而服务器是
3、提供服务的一方。在客户/服务器模式中服务器端所提供的功能不仅仅是文件、数据库等服务,还应当有相应的计算、通信等能力也就是说在工作时由客户端和服务器端各自负担一部分计算或通信的功能。客户/服务器模式已经成为计算机网络互连中最重要的应用技术之一,它把一个大型的计算机应用系统变为多个能互为独立的子系统,而服务器便是整个应用系统资源的存储与管理中心,多台客户机则各自处理相应的功能,共同实现完整的应用。浏览器/服务器器(Broowseer/Serrverr)模式式从本质质上将,仍然是客户/服务器模式(是客户/服务器模式的特例)。只不过在某些应用方面,如数据库服务,它将传统的二层客户/服务器结构发展成三层
4、的客户/服务器结构并在Internet上应用而已。在上述几几种模式式中,客客户/服务器器模式具具有灵活活多变的的体系结结构、丰丰富的开开发环境境和强大大的设备备驱动能能力。12本本文所采采用的网网络应用用程序编编程接口口网络程序序之间进进行通讯讯,必须须建立在在一定的的通讯协协议基础础之上。对对于UNIIX下的应应用程序序,可用用的协议议有TCPP/IPP的传输输控制协协议TCP(Traansmmisssionn Coontrrol Prootoccol)和用用户数据据报协议议UDP(Useer DDataagraam PProttocool),XNS(Xerrox Nettworrk SSy
5、sttem)的定序序分组协协议SPP(Seqquenntiaal PPockket Prootoccol)和网网际数据据报协议议IDP(Intternnetwworkk Daataggramm Prrotoocoll)以及ARPPANEET的接口口报文处处理机链链路IMPPLINNK(Intterffacee Meessaage Proocesssorr Liink)等。因因为Intternnet的普及及,使得得TCPP/IPP成为使使用最广广泛的协协议。UNIXX下基于TCPP/IPP协议的的网络应应用程序序编程接接口API(Apppliccatiion Proograammiing Int
6、terffacee)有两两种:源源自BSDD UNNIX的Sockket APII和AT&T的传输输层接口口TLI(Traanspportt Laayerr Innterrfacce)的超超集X/OOpenn传输接接口XTI(X/OOpenn Trranssporrt IInteerfaace)。这这两种API都是面面向客户户/服务器器模式的的。由于于Socckett APPI已经成成为事实实上的标标准,因因此本文文在介绍绍服务器器端程序序的设计计方法时时也采用用Socckett APPI。2客户户/服务器模式的Socckett实现框框架21 TCPP/IPP Soockeet的基本本原理。T
7、CP/IP对外提提供的只只是编程程接口而而非用户户服务,真真正的用用户服务务还得靠靠编写相相应的服服务程序序来实现现。TCPP/IPP的Socckett APPI编程接接口构成成了使用用协议的的网络应应用程序序视图。服务程序客户程序Socket APITCP/IP协议物理介质图1网网络应用用程序、Socckett APPI和TCPP/IPP的关系系Sockket APII在BSDD UNNIX中首次次提出,其其目的是是为了解解决网络络间程序序通讯的的问题。就就其原理理而言,面面向连接接的Socckett类似于于电话系系统,无无连接的Socckett类似于于电报系系统。Sockket实质上上是为
8、网网络程序序提供了了通讯的的端点号号。对于于每个网网络程序序的一个个Socckett,它首首先有一一个半相相关的端端点号的的描述:协议,本本地地址址,本地地端口,如果果它是与与另一个个Socckett连接了了的,则则有一个个相关的的端点描描述:协议,本本地地址址,本地地端口,远远程地址址,远程程端口。每个Socckett有一个个本地唯唯一的由由操作系系统分配配的编号号。22 Socckett的系统统调用Sockket是面向向客户/服务器器模式设设计的,它它针对客客户和服服务器程程序提供供了不同同的系统统调用。同同时它还还分为面面向连接接和无连连接两种种类型。下下表列出了Socckett APP
9、I的基本本函数(这这里就不不对调用用参数进进行说明明了)。表1 基基本的SSockket系系统调用用函数名用途使用者相关协议议说明sockket建立一个个通讯端端点客户、服服务器TCP、UDPPbindd为一个连连接的本本地socckett赋名客户、服服务器TCP、UDPP使用TCCP时,使使用者为为服务器器;使用用UDP时,使使用者为为客户listten监听soockeet上的连连接服务器TCPacceept接受soockeet上的连连接服务器TCPconnnectt对socckett进行连接接初始化化客户TCPreadd从socckett接收信信息客户、服服务器TCPwritte向socc
10、kett发送信信息客户、服服务器TCPrecvvfroom从socckett接收信信息客户、服服务器UDPsenddto向socckett发送信信息客户、服服务器UDPclosse关闭soockeet客户、服服务器TCP、UDPP23面面向连接接和无连连接的客客户/服务器器模式的的程序流流程框架架图服务器socket ( )服务响应服务请求建立连接处理服务请求bind ( )listen ( )accept ( )阻塞并等待客户的连接请求read ( )write ( )客户socket ( )connect ( )write ( )read ( )图2面面向连接接的客户/服务器器模式服务器服
11、务响应服务请求bind()recvfrom()阻塞并等待客户数据处理服务请求sendto()socket()客户recvfrom()sendto()bind()socket()图3无连连接的客客户/服务器器模式3服务务器程序序的设计计方法31总总述客户程序序一般比比较简单单,而服服务器程程序就比比较复杂杂了,因因为对服服务器程程序的设设计,必必须考虑虑到其响响应速度度和响应应能力等等服务性性能因数数。本文文主要讨讨论的是是面向连连接的服服务器程程序设计计方法。总体上服服务器程程序可分分为两类类:并发发服务器器(Conncurrrennt SServver)和串串行服务务器(Iteerattiv
12、ee Seerveer)。前前者主要要针对实实时性的的客户/服务器器模式,后后者主要要针对服服务量小小的客户户/服务器器模式。32 TCP串行服服务器程程序串行服务务器程序序是这样样的:每每次它只只能为一一个连接接过来的的客户程程序提供供服务,只只有在完完全处理理了一个个客户的的请求后后,才能能响应下下一个客客户的请请求,即即按照FIFFO的原则则响应请请求。一一般很少少使用串串行服务务器程序序,不过过诸如时时间/日期等等服务量量小的且且实时性性要求不不高的服服务器程程序可以以使用该该方式。从从进程控控制的角角度来讲讲,该方方式的速速度是最最快的,因因为它不不进行进进程控制制,系统统开销小小。
13、33传传统的TCP进程并并发服务务器程序序在这种方方式下,并并发服务务器程序序在收到到客户程程序请求求后,派派生出一一个子进进程来为为该客户户程序服服务,自自己则回回到等待待状态,准准备接收收下一个个客户程程序的请请求,子子进程在在服务完完成后退退出。其其中,作作为父进进程的并并发服务务器程序序成为主主服务器器(massterr),具具体处理理客户请请求的子子进程成成为从服服务器(slavve)。响应子进程接管连接客户程序slave服务请求父进程返回生成子进程fork()连接connect()处理请求master接受客户请求accecp()图4 传传统的TCP进程并并发服务务器程序序框架并发服
14、务务器的问问题在于于派生子子进程(forrk()操操作)时时会消耗耗CPU的很多多时间,这这对需要要响应数数目众多多的客户户进程的的服务器器进程所所在的系系统是极极为不利利的,例例如对于于Web服务器器就是这这样。34 TCPP预先派派生子进进程并发发服务器器程序在传统的的TCP进程并并发服务务器程序序的基础础上,可可以对响响应方式式进行一些改改造。传传统的TCP进程并并发服务务器程序序的响应应方式是是即响应应即派生生子进程程。现在在将这种种方式改改变为:服务器器程序启启动后就就先生成成若干子子进程以以备响应应,这些些子进程程构成服服务子进进程组,而而父进程程则成了了监控进进程。fork可用子
15、进程组父进程子进程1子进程2子进程3客户2客户1子进程N图5 TCCP预先派派生子进进程这里需要要解决的的问题是是:怎样样保持一一定量的的可用子子进程;服务请请求到达达时,唤唤醒子进进程的机机制应该该怎样以以及父进进程怎样样将必要要的信息息传递给给子进程程。父进程监监视可用用子进程程的数量量,当数数量低于于某个阈阈值时就就再派生生一些子子进程,当当数量高高于某个个阈值时时就终止止一些可可用子进进程。当当然,总总的子进进程数量量也应当有有个上限限值,以以防止系系统资源源消耗完完。这样样就使得得可用子子进程数数及总的的子进程程数保持持在一定定范围之之内了。预先生成成得子进进程在各各自调用用accc
16、eptt()后后进入睡睡眠状态态。由于于这些子子进程共共用一个个socckett结构,当当一个可可户请求求到达时时,就会会造成惊惊群(thuundeerinng hherdd)唤醒所所有的子子进程。当当然,只只有最先先被调度度的子进进程才会会获得客客户的连连接,其其他的子子进程会会再次进进入睡眠眠状态。这这种情况况会导致致系统性性能的下下降。解解决这个个问题的的方法是是给accceptt上锁,即即保证accceptt操作的的原子性性。有些些UNIIX系统在在内核已已经解决决了这一一问题,就无须再给accept上锁了。如果子进进程只是是父进程程的副本本,基本本上就不不用额外外考虑进进程通讯讯的问
17、题题了。如如果将父父进程改改造成类类似于ineetd的守护护进程(启启动后先先调用forrk()生生成子进进程,再再通过exeec系统调调用执行行服务处处理程序序),就就必须解解决父进进程同子子进程之之间的通通讯问题题。UNIIX下进程程通讯的的机制有有多种,如如管道(pippe),具具名管道道(nammed pippe),IPC消息(IntterPProccesss Coommuuniccatiion Messsagge)等。这这里我们们使用IPC消息队队列来向向子进程程传递socckett描述字字。消息队列客户1客户2父进程子进程1子进程2子进程3可用子进程组子进程N图6 使用IPC消息机
18、机制的TCP预先派派生子进进程方法法35 TCPP线程并并发服务务器程序序线程的执执行效率率比进程程高10到100倍。编编写线程程函数时时必须注注意函数数的线程程安全性性。并非非所有的的UNIIX系统或或同种UNIIX的不同同版本都都支持线线程。由由于在方方法上线线程服务务器程序序同进程程服务器器程序的的设计差差不多,这这里就不不作多的的描述了了。4结束束语编程人员员在编写写具体的的服务器器程序时时,应当当结合具具体的应应用、网网络结构构和网络络性能等等情况,尽尽可能地地提高服服务效率率和网络络安全性性。参考文献献1网网络操作作系统的分分类lleasse.qqz.ffj.ccn/pperssonppagee/olldliion/couursee.fiiless/Noovelll/nnos.htmm2WW.Riichaard SteevennsUNIIX网络编编程(第第1卷)清华大大学出版版社 19999年7月3蔡蔡传俊UNIIX/TTCP/IP/NFSS网络编编程与应应用开发发海洋洋出版社社 19993年1月4周周明天汪文勇勇TCPP/IPP网络原原理与技技术清清华大学学出版社社 19997年2月通讯地址址:四川川省成都都市四川川大学西西区自动动化系刘玉生转 61100665emaiil:kaii.liiu2633.neet