《python核心编程第三版网络编程章节》

原书籍 《core PYTHON APPLICATIONS programming》THIRD EDITION Wesley J.Chun 
参考书籍《Python核心编程》第三版 孙波翔 李斌 李晗 译 Wesley J.Chun 著
禁止转载
2.1 介绍
  在本节中,我们会先简单介绍网络编程套接字的使用。但是在此之前,我们应研究下一些关于网络编程的基本知识,对于python来说套接字是如何工作的,并为你展示如何使用python自带的一些库来搭建一个基于网络的应用。

2.2 什么是客户端/服务器架构?
  什么是客户端/服务器架构?每个人都有不同的见解,这取决于你在问谁, 同样描述的是软件还是硬件系统。在这二者中,前提都很简单:服务器——一些硬件或软件所搭建起来的环境,这个环境提供了一种被一个或多个客户端所需的“服务”(users of the service不译)。它存在的唯一目的是等待(客户端)请求并响应那些客户端(提供服务),然后再继续等待更多的请求。
客户端,换句话说,为了某种特殊请求而联系服务器,发送一些必要的数据并等待服务器响应,最后 完成请求或返回引起异常的原因。服务起则不同,服务器将无限运行下去,持续接受请求。客户端只会对服务器进行一次性的请求,接受服务器所提供的“服务”,然后结束这次与服务器的事务。一个客户端可能在一次请求后有额外的请求,但它被认为是不同的事务。
  如今对于客户端/服务器架构最普遍的观念如例图2-1所示,它描述了一个用户或是一个客户端通过网络从服务器上检索信息的过程。尽管这样的一个系统确实是一个具体的客户端/服务器架构,但这仅仅是其中一种情形。此外,客户端/服务器架构还可以应用于计算机硬件,也可以应用于计算机软件。
图片
2.2.1 硬件客户端/服务器架构
  打印(打印机)服务器是硬件服务器的一个具体例子,它们处理传入的打印工作并且发送给系统中的打印机(或是一些其他的打印设备) 。这样的计算机通常可以通过网络工作,并且客户端计算机可以向它发送打印请求。
  另一种硬件服务器的例子是文件服务器。这些服务器通常拥有庞大通用存储容量的计算机,且客户端拥有远程访问的权限。客户端计算器挂载在服务器的磁盘上,这些磁盘如同在本地计算机上。其中最流行的一种网络操作系统是Sun公司的Network File System(NFS)。如果你正在通过网络访问一个磁盘驱动器,并且无法判断它是存储在本地的还是网络上的,此时,客户端/服务器架构已经完成了它的工作。它的目的就是让那些用户体验到与本地磁盘一样的服务,抽象地说就是正常的磁盘访问,它都是以编程实现的来确保它以这样的方式进行服务。
2.2.2
  软件服务器同样在一些硬件上运行,但没有硬件服务器一样拥有专用外设,比如打印机,磁盘驱动器等等。其主要服务包括软件服务器的程序执行、数据传输检索、聚合、更新,或其他类型的编程或数据操作。
  如今更为普遍的一种软件服务器是Web服务器。如果一些个人或是公司想要运行属于他们的Web服务器,那么至少需要一台计算机或是更多,在上面安装了要提供给用户的Web页面和Web应用,然后启动Web服务器。这样的一台服务器的任务是接受客户端请求,返回Web页面给(Web)客户端(浏览器),接着等待下一个客户端的请求。这些服务器一旦运行就可能永不停止。尽管它们并不能完成这一目标,但是它们会尽可能地长期运行下去,除非被一些外力迫使关闭,例如显式地关机(#原文shut down,如果单单译成关机不符合原意,这里更多的说是外力迫使,那应该译成关闭电源,但关闭电源只是shut down的一种情形,因此翻了翻书,译为显式地关机更为妥当),或灾难性地关闭(硬件故障)。
  数据库服务器是另一种类型的软件服务器。它们接受用户存储或检索的请求,响应请求,并等待更多的事务。它们同样被设计为永久运行。
  我们讨论的最后一种软件服务器是窗体(#原文Windows,这里如果译作我们常用的Windows操作系统服务器是不符的,Windows服务器是一种实例化的事物,而不是我们要探讨的普遍类型,注意我们着重讲的是类型,而不是具体化的实例,因此译作这种操作系统服务器是不合适的)服务器。这种服务器几乎可以被认为是硬件服务器。它们运行在一台外接显示设备(如显示器)的计算机上。窗体客户端实质是一些程序,需要窗口化的环境来运行。这些通常被认为是图形用户界面(GUI)应用程序。如果在没有窗体服务器的情况下运行它们,即认为它们在基于文本的环境中,比如DOS窗口或者UNIX shell中,是无法启动的。一旦能够访问窗体服务器,那么一切都会正常。
  当在网络环境中时,这种情况会变得越来越有趣。窗体客户端的显示设备是本地计算机,但是它通常在一些网络窗体环境中,如X Windows系统,可选择不同的计算机窗口服务器作为显示设备。在这种情况下,你可以在一台计算机上运行GUI程序,但它将显示在另一台计算机上。

2.2.3 银行出纳员作为服务器吗?
  一种关于客户端/服务器架构如何工作的想象是,在你脑海中创建一个银行出纳员,他不眠不休,服务一个接着一个的序列(#书上译作排队,或许更准确些)客户,看起来似乎永不停止(如例图2-2)。这条序列可能很长又或者有时为空,但在任何时刻都有可能有一个客户出现。当然,这种出纳员在几年前是一种幻想,但是现在的自动取款机(ATMs)似乎比较接近这种模型。
  当然,出纳员就是一种处在无限循环中的服务器。每个顾客就是一个客户端,每个客户端都有一个要求解决的需求。顾客到达银行,出纳员按照“先来先服务”(first-come-first-served)的原则来处理这些顾客的请求。一旦一件事务处理完成,顾客就会离开,接着出纳员服务下一位顾客,或者坐下等待下一个顾客到来。
  为什么这些都很重要呢?个中缘由是这种执行方式(#原文execution style,style风格样式)正是客户端/服务器架构的工作方式。既然你拥有了它的基本概念,让我们将它应用(#adapt,改编,使适应)于网络编程中,而网络编程正是遵循软件客户端/服务器架构的模型。
图片

网上没有中文版的pdf,手上有一本中文版的。
完成了一件以前觉得很酷的事,自己翻译一些东西,原本想着把RFC1922给翻译了,然而真的是自己看都看不懂。
强行翻译太费劲了,专业术语看书抄的,怕这些译错了影响理解。
今天就到这吧,不定期译一译, 2017年2月1日18:12:03。
发布了15 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Christopher_L1n/article/details/70232132