首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.2  同步及异步消息交换

在很多网络应用程序中,客户向服务器发送一个请求,后者处理这个请求,然后返回一个应答。这种请求/应答协议既可以在无连接协议上实现,也可以在面向连接协议上实现。管理请求/应答协议交换的可选策略有两种:同步(synchronous)和异步(asynchronous),如图1.2所示。是选择同步还是异步消息交换策略,要考虑以下两个因素:

图1.2  同步及异步消息交换策略

1.        请求之间的关联性(interrelatedness);

2.        底层协议或传输介质的延迟。

以下,我们来看看这些因素如何影响到策略的选择。

同步请求/应答协议。这是最容易实现的形式。在这种协议中,请求(request)和应答(response)是以锁步(lock-step)次序交换的。每一个请求必须同步地接收到一个应答,然后才能发送下一个请求,如图1.2(1)所示。同步请求/应答协议适用于以下场合。

l  请求的结果决定后续的请求。例如,某一应用程序需要交换验证信息,那么,在安全认证信息成功交换之前,它不会发送机密信息请求。

l  应用程序中交换的信息需要在低延迟(low-latency)网络中执行短期处理,如高速LAN中的NFS read()和write()操作。

l  较之后文介绍的异步请求/应答协议有可能获得的“性能上的提高”,“实现(implementation)的简易性”或“协议交换的少量性”更为重要。

异步请求/应答协议。它将请求从客户连续发送至服务器,无需同步地等待应答[AOS+00]。多个客户请求可以在服务器应答到达之前发送,如图1.2(2)所示。因此,异步请求/应答协议往往需要一种策略,用来检查请求的丢失或失败,然后重新发送。异步请求/应答协议适用于以下场合:

l  无需应答就可以决定后续请求。例如,Web浏览器可以使用异步策略,用于从同一服务器获取多个嵌入图像。因为每一个请求都是独立的,它们全都可以异步发送,不必等待应答。浏览器利用每一个应答中包含的信息,将应答匹配至相应的请求——即使应答的顺序不同于请求的发送顺序。

l  “通信的延迟”和“请求所需的处理时间”密切相关。异步请求策略有助于有效地利用网络,减少高延迟带来的影响。较之将“应答”和“请求”关联起来并实现“重试”策略所带来的额外复杂度,它在性能上的提高更为重要。

日志服务程序 => 在网络日志服务器中,我们使用的是异步请求/应答协议的单向形式(one-way variant),所以不需要应用程序级(application-level)响应。日志记录只是从客户应用程序传给日志服务器,也就是说,不需要服务器在应用程序级做出应答。日志服务器在接收到每一条日志记录后,都会将记录立即写入磁盘,并假设每一条发送出来的日志记录都被可靠地记录了下来。只要客户程序不需要网络日志服务程序采取“强烈”手段来确保所有日志记录都被永久存储——即使有灾难性的故障发生——这个设计就已经足够了。如果真的有那样的需求,我们就得开发“基于事务(transaction-based)”的日志服务;那将会更复杂,还会带来显著的时间/空间开销。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论