关于服务器软件设计算法和问题的第7讲.ppt
文本预览下载声明
《互联网络程序设计》 第七讲 服务器软件设计的算法和问题 电子科技大学计算机学院 服务器软件设计概述 无连接和面向连接的服务器访问 无状态和有状态的服务器应用 循环和并发的服务器的实现 简单服务器的算法: 创建套接字 绑定到一个熟知端口 期望在这个端口上接收请求 进入无限循环,接受客户请求并应答 只适用于最简单的服务… 并发服务器和循环服务器 循环服务器:一个时刻只处理一个请求 并发服务器:一个时刻可以处理多请求 多数只提供表面并发:执行多个线程,每个线程处理一个请求 使用单线程的可能性:计算量小,主要是异步I/O, 便于同时使用多个通信信道 并发处理多个请求,而不是指下层是否使用了多个并发线程 循环服务器容易构建,但是性能差;并发服务器难以构建和设计,但是性能好 面向连接和无连接的访问 连接性问题是传输协议的中心,TCP/IP提供了两种协议:TCP, UDP 使用TCP的服务器是面向连接的服务器 使用UDP的服务器是无连接的服务器 选择面向连接或者无连接的服务,依赖于应用协议 设计上使用面向连接的传输服务的应用协议时,如果实际中使用了无连接的传输协议时,将可能不能正确地运行或者不能有效运行。 传输协议的语义 TCP的语义 点到点通信 建立可靠连接 可靠交付 具有流控的传输 双工传输 流模式 面向连接的服务器 面向连接的服务的优点: 易于编程 自动处理分组丢失,分组失序 自动验证数据差错,处理连接状态 面向连接的服务的缺点: 对每个连接都有一个单独的套接字,耗费更多的资源 在空闲的连接上不发送任何分组 始终运行的服务器会因为客户的崩溃,导致无用套接字的过多而耗尽资源 无连接的服务器 优点:没有资源耗尽问题 缺陷:需要自己完成可靠通信问题 必要时,需要一种自适应重传的复杂技术,需要程序员具有相当的专业知识 对于可靠通信的场合,尽量使用tcp 是否需要组播或者广播是考虑选择何种传输方式的一个因素 支持组播或者广播的服务器必须是无连接的,今后会不断增加这样的应用。 故障、可靠性和无状态 状态信息:服务器维护的,关于它和客户正进行的交互状态信息 无状态服务器:没有保留任何状态信息 状态服务器:维护状态信息的服务器 无状态源于对确保可靠性的要求:无连接传输不可靠 传输协议不能保证可靠,应用协议的设计必须保证可靠 实现服务器如果有状态依赖,必须慎重 优化无状态服务器 一个无连接服务器,允许客户从服务器机器磁盘上读出文件 要保持无状态,每个客户请求都必须指定文件名,文件中的位置,读取的字节数 设计服务器的时候,我们注意到: 文件打开和关闭的额外开销较高 使用该服务器的客户请求可能只读十来字节 客户通常按顺序读取文件数据 服务器从内存缓冲区读取数据比磁盘快得多 优化服务器性能维护一个小的文件信息表 优化无状态服务器 使用IP地址和端口号索引 将没有发现的读取数据从磁盘读到内存 优化无状态服务器 上述的信息表格可以改善服务器性能 需要程序员极其小心:检查文件名等 如果客户出了故障重新启动,将会重新获得一个不同的端口号,先前的表项将会失去作用,最终会耗尽服务器资源 服务器可以选择删除LRU(最近最少使用)条目。但是如果客户经常崩溃,可能让服务器删除一个合法的客户条目 优化无状态服务器的时候,程序员必须小心 如果客户经常崩溃或者重启,或者网络使报文重复或者迟延,管理少量状态信息也会消耗资源 四种基本类型的服务器 循环的或者并发的 使用面向连接的或者无连接的传输 请求处理时间 循环服务器是最简单的,客户按照顺序等待。是否能够满足要求取决于所需的反应时间 观测响应时间:客户发送请求到服务器响应之间的全部时延。 请求处理时间:服务器处理单个孤立的请求所花费的时间。 循环服务器一次处理一个请求。如果N代表请求队列的平均长度,观测响应时间大约是N/2+1个服务请求处理时间 如果一个服务器设计处理K个客户,每个客户每秒发送R个请求,服务器请求处理时间必须小于每请求1/KR秒。否则请求队列将溢出。这时设计者必须考虑并发实现 循环的面向连接的服务器算法 通过TCP的面向连接的循环服务器算法 1、创建套接字并将其绑定到它所提供服务的熟知端口上; 2、将该端口设置为被动模式,使其准备为服务器所用; 3、从该套接字上接收下一个连接请求,获得该连接的新的套接字; 4、重复地读取来自客户的请求,构造响应,按照应用协议向客户发回响应; 5、当某个特定客户完成交互时,关闭连接,并返回步骤3以接受新的连接。 用INADDR_ANY绑定熟知端口 服务器需要创建套接字并将其绑定到所熟知的端口上 getportbyname:服务名映射到熟知端口上 bind为某个套接字指明某个端点,使用结构sockaddr_in,该结构含有IP地址和端口号 对于多接口主机使用INADDR_ANY指
显示全部