客户-服务器范型
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章 高级分布式范型
图5.3
客户 请求1 应答1 请求2 应答2 进程间 通信 请求n 应答n
服务器
时间
图5.3 客户-服务器模型中进程间通信的请求-应答模式
第5章 高级分布式范型
这里再次以Daytime服务为例,来分析一下这类协议。
该协议定义了以下内容:
• 客户请求不需要任何语法,因为它与服务器的联系自 动隐含了对时间数据的请求。
了应用逻辑细节及低层服务逻辑。结果是,DaytimeClient1.java的 开发人员不必关注IPC中使用的socket类型。 应用逻辑类 DayClientHelper1.java封装了客户端的应用逻辑。该模块 使用DatagramSocket、myClientDatagramSocket,执行发送请求或 接收应答的IPC。注意,数据包socket的使用细节被隐藏。
第5章 高级分布式范型
服务逻辑 类MyClientDatagramSocket.java提供了IPC服务
细节,该例中使用了数据包socket API。
将三层逻辑分成不同软件模块的优点有: • 逻辑分离使得一层逻辑的修改无需涉及其他层的变更。 例如,可将用户界面从文本逻辑变换成图形模式,而 不必改动应用层逻辑或服务逻辑。类似地,应用层逻 辑的修改应对表示层透明。 • 每个模块可以由具有特定技能的人员开发,效率高。
第5章 高级分布式范型
Weekday, Month Day, Year Time-Zone
Example: Tuesday, February 22, 1982 17:37:43-PST
在该规范中,时间戳的格式(或语法)留给实现者决
定。
在协议中选择文本模式数据表示的优点在于,使对 话易于被他人阅读。因为可以使用标准文本模式I/O显 示交互数据。
第5章 高级分布式范型
5.3.3 采用无连接数据报socket的Daytime客户-服务器
1. 客户端软件
表示逻辑 图5.6描述了类DaytimeClient1.java,该类封装了客户端的表
示逻辑,即从用户处获取输入(服务器地址)和向用户显示输出(时
间戳)。为获取时间戳,需要调用“helper”类的方法,该方法隐藏
recommended that it be limited to the ASCII printing characters,space,carriage return,and line feed. The daytime should be just one line. One popular Syntax is
• 应答是一个字符串形式的时间戳,它根据协议规范进
行了格式化。
第5章 高级分布式范型
5.2.4 数据表示 选择哪一种数据表示,取决于协议的特性及其需要。
对简单服务如Daytime来说,采用文本模式表示就是一
种较为合理的选择,如RFC 867中的描述一样: Daytime Syntax
There is no specific syntax for the daytime. It is
服务器:好的,这里是该页面的内容(内容)。
第5章 高级分布式范型
每个会话的对话都遵守该服务协议预先定义的交
互模式。例如,Daytime支持RFC 867定义的协议。任
何实现该服务的客户或服务程序都要遵循该协议规范, 包括应该如何进行每个会话对话。
除此之外,该规范还定义了:
(1)客户和服务器之间的进程间通信顺序 (2)每个请求和应答的语法和语义 (3)双方在接收到特定请求或应答后应采取的动作。
server"+DaytimeClientHelper1.getTimestamp(hostName,portNum));
} //end try catch (Exception ex) { ex.printStackTrace(); } //end catch } //end main } //end class 图5.6 DaytimeClient1.java
第5章 高级分布式范型
• 服务层。支持应用所需的服务有: (1)在客户端,服务器主机时钟的读出
(2)双方的IPC机制
第5章 高级分布式范型
客户端软件 表示逻辑 应用逻辑 服务逻辑
服务器端软件 表示逻辑 应用逻辑 服务逻辑
图5.5 客户-服务器应用 的软件体系结构
第5章 高级分布式范型
5.3.2 IPC机制
在客户-服务器体系结构中,术语客户和服务器指 的是计算机,而在客户-服务器分布式计算范型中,这 两个术语指的是进程。
第5章 高级分布式范型
图5.1描述了客户-服务器模型这一概念。服务器进程 运行于网络计算机上,管理该主机提供的网络服务。服务 器主机也可能提供由其他服务器进程管理的其他网络服务。 用户利用客户进程访问特定服务。此时,也可能有其 他客户进程来运行在该客户主机上,但必须使用相应客户 进程访问特定服务。 客户-服务器模式的目的是提供网络服务。网络服务一 直是分布式计算领域中最流行的应用。这里的网络服务指 的是允许网络用户共享资源的服务。如telnet允许远程登录 到某服务器主机上、ftp用于向服务器主机发送或接收文件, Daytime提供从服务器主机上获得时间戳,www通过服务器 主机获取web内容。
第5章 高级分布式范型
5.2.3 进程间通信及事件同步
在客户-服务器模型中,进程之间的交互是遵循请 求-应答模式的。在一次会话期间,客户向服务器发出 服务请求,服务器回复一条应答消息。客户接着可以 发出下一个请求,随后再接收到服务器的另一条应答 消息,该模式可以无限地重复下去,直到会话结束。
客户在发出每一个请求后,都必须先等待服务器 的应答,然后才能进一步继续处理。 例如,Daytime是一种简单的网络服务,客户进程 仅从服务器进程获取时间戳。如果翻译成自然语言描 述,该协议在服务会话期间的对话按如下方式进行:
第5章 高级分布式范型
import .*;
public class DaytimeClientHelper1 { public static String getTimestamp(String hostName,String portNum) { String timestamp="";
服务的定位
在最简单的方案中,服务定位机制是静态的,可用服务 器进程的地址(ip地址和端口号)来识别. 在较高层的抽象层上,可以采用在目录或注册表中注册
的逻辑名来识别服务。定位时,逻辑名需要映射到服务器
进程的物理位置上。如果在运行时进行映射,服务位置则 可能是动态的,在这种情况下,可以说服务是位置透明的。
应用逻辑中将使用IPC机制,该机制的选择将影响 应用中的数据传输方式。
根据目前所学的IPC机制,我们可以选择使用:
(1)无连接数据报socket
(2)面向连接数据报socket (3)流式socket 在适当的软件体系中,可将IPC机制的细节向表示 逻辑隐藏,使之只影响应用逻辑的IPC命令语法 首先使用无连接数据报socket,然后改成面向连接的流 式socket。
第5章 高级分布式范型
System.out.println("what is the port number of the server host?"); String portNum=br.readLine(); if (portNum.length()==0) portNum="13"; System.out.println("Here is the timestamp received from ths
第5章 高级分布式范型
5.3 网络服务中的软件工程
5.3.1 软件的体系结构
客户-服务器应用的软件体系结构可按如下方式描述:
• 表示层。在服务器端,需要用户界面来启动服务器进 程。一般情况下,在命令行上执行一条命令即可。在
客户端,需要用户界面以便用户可以请求服务器服务
或接受服务器响应。 • 应用逻辑层。在服务器端,需要从系统中获取时间并 发送给客户主机。在客户端,需要将用户请求转发给 服务器,并将服务器应答显示给用户。
第5章 高级分布式范型
catch (Exception ex) { ex.printStackTrace(); } //end catch return timestamp; } //end main
} //end class
图5.7 DaytimeHelper1.java
第5章 高级分布式范型
图5.1
一个服务请求 一个客户进程 一个服务器进程 一个服务 服务器主机 客户主机
. . .
图5.1 客户-服务器分布式计算范型
第5章 高级分布式范型
5.2 客户-服务器范型中的关键问题
5.2.1 服务会话 在客户-服务器模型环境中,用术语会话表示服务器和一个客 户之间的交互。如图5.1所示,服务器管理的服务可以由希望使用 该服务的多个用户(并发)访问。 每个客户在使用服务器提供的服务时,都单独和服务器建立一 个会话。在会话期间,客户与服务器进行对话,直到已获取了所 需的服务时为止。 图5.2示出了服务器进程的执行流程。一旦启动后,网络服务器
第5章 高级分布式范型
import java.io.*;
public class DaytimeClient1 {
public static void main(String[] args)
{ InputStreamReader is=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(is); try { System.out.println("welcome to the Daytime client.\n" +"what is the name of the server host?"); String hostName=br.readLine(); if ( hostName.length()==0) hostName="localhost";
第5章 高级分布式范型
第5章 客户-服务器范型
5.1 背景 5.2 客户-服务器范型中的关键问题 5.3 网络服务中的软件工程 5.4 面向连接服务器与无连接服务器 5.5 迭代服务器与并发服务器 5.6 有状态服务器
第5章 高级分布式范型
5.1 背景
在客户-服务器体系结构中,服务器指专门用于管 理打印机或文件等资源的计算机,其他通过服务器访 问这些资源的计算机称为客户。 在分布式计算中,客户-服务器范型指一种网络应 用模型,其中的进程可扮演以下任一角色:服务器进 程专门用于管理网络服务访问,客户进程访问服务器 以获取网络服务。
第5章 高级分布式范型
客户:你好,我是<客户地址>。我可以向你要一个时间 戳吗? 服务器:给,这是你要的时间戳。(时间戳) 类似地,WWW会话中的对话按如下方式进行:
客户:你好,这是<客户地址>
服务器:你好,我是web服务器,采用的会话协议是 HTTP1.0 客户:好的。请你将文档树根目录下的index.heml页面传 给我。
进程就无限期地运行,不断循环来接受客户的会话请求。服务器
为每个客户创建一个服务会话。
第5章 高级分布式范型
启动服务
接受客户会话请求
建立客户会话
图5.2 服务器进程的执行流程
第5章 高级分布式范型
5.2.2 服务协议 为实现服务,需要一个协议来定义客户和服务器在服务会 话期间必须遵守的规则。其内容包括(1)服务定位方法(2)进 程间通信的顺序(3)交换数据的表示及解释。
try {
InetAddress serverHost=InetAddress.getByName(hostName); int serverPort=Integer.parseInt(portNum); MyClientDatagramSocket mySocket=new MyClientDatagramSocket(); mySocket.sendMessage(serverHost,serverPort,""); timestamp=mySocket.receiveMessage(); mySocket.close(); } //end try