第十章 分布式应用程序

728 篇文章 1 订阅

第十章    分布式应用程序

 

使用网络的应用程序,叫分布式应用程序(distributedapplications),今天,已越来越重要。幸运的是,.NET BCL(Base Class Library,是 .NetFramework 下所有语言使用的类库) 和其他库提供了许多结构,让通过网络通信变得容易,因此,在 F# 中创建分布式应用程序非常简单。

 

 

网络概述

 

有几种类型的分布式应用程序,通常分为,客户端-服务器(client-server)应用程序,即,客户端向中央服务器发出请求;和点对点(peer-to-peer)应用程序,计算机之间相互交换数据。这一章,我们将重点学习构建客户端-服务器应用程序,因为这是目前比较常见的。不管你想构建哪种类型的分布式应用程序,计算机交换数据的方法都是由协议控制的。协议(protocol)就是一种标准,定义了在网络上进行通信的规则。

构建一个有网络功能的应用程序,程序员通常认为一项最具挑战性的任务,是能够执行,有充足的理由。构建网络应用程序,必须考虑三个重要条件:

1.可伸缩性(Scalability):当许多用户并行使用时,应用程序必须保持响应。通常,这意谓着,需要广泛地测试与分析服务代码,检查在高负载下的执行。第十二章可以找到有关分析代码的详细内容。

2.容错(Fault tolerance):网络本来就不可靠,因此,编写的代码不应该假定网络永远是好的。如果你这样做了,这样的应用程序对于最终用户来说是令人沮丧的。每一个应用程序都应有延时,以保证通信错误能够顺利处理,给用户适当的反馈,显示出错信息,也可提供诊断和重试的机会。不要因为网络故障而使应用程序崩溃。还应该考虑数据的一致性(即,能够保证所有必须的更新在保持数据一致的情况下到达目标计算机)。使用事务和关系型数据库存储数据可以帮助做到这一点。根据应用程序的类型,也可以考虑有一种离线模式,给用户提供存取本地数据的能力,使网络在线之前的网络请求处于排队状态。大多数电子邮件的客户端,就是这种离线模式的一个很好的例子。

3.安全(Security):虽然安全是每一个应用程序都应该关心的,但是,在网络编程中安全是极为重要的问题。这是因为,把应用程序暴露到网络上,对网络上任何用户的攻击也就开放了。因此,如果应用程序暴露到互联网上,就会有成千上万甚至上百万的潜在攻击者。通常,需要考虑的,包括跨网络传输的数据是否安全,可以用签名保证数据不被篡改,或者通过加密确保只有适当的用户可以读取。还要保证连接到应用程序的用户经过认证和授权。

 

幸运的是,由于有了网络协议,现代程序员不需要自己动手解决这些问题。有一点很重要,例如,如果在网络上没有其他人可以读取你发送的数据,就不必要加密数据;相反,应使用网络协议提供这项服务。这些协议以组件形式公开,来自于实现它们的库。使用的协议类型和库,由应用程序的需求决定。有些协议提供了加密和认证,有些没有;有些适合于客户端-服务器应用程序,有些适合于点对点应用程序。在这一章,我们将学习下面的组件和库,以及它们所实现的协议:

TCP/IP 套接字:为网络上大量应用程序(客户端-服务器、点对点)提供控制。

HTTP/HTTPS请求:提供从网页到服务器的请求,通常是客户端-服务器应用程序。

网站服务:暴露应用程序,使其他应用程序可以请求服务,通常只为客户端-服务器应用程序。

Windows 通信基础 (WindowsCommunication Foundation,WCF):扩展 Web 服务,为现代程序员提供更多功能支持,包括且不限于,安全性、事务,同时为客户端-服务器、点对点应用程序。

 

通过网络提供用户界面的一个简单方法是开发网站应用程序(Webapplications)。网站应用程序不在这里讨论,可以参考第八章的 ASP.NET 一节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值