第八章

来源:互联网 发布:js文本框失去焦点时 编辑:程序博客网 时间:2024/04/28 10:41

8.23并发的、面向连接服务器的算法


以连接作为通信的基本模式

并发服务器使用面向连接协议的步骤:

算法8.4


主1: 创建套接字并将其绑定到所提供服务的熟知地址上。让该套接字保持非连接的。

主2: 将该端口设置为被动模式,使其准备为服务器所用

主3: 反复调用accept,以便接收来自客户的下一个连接请求,并创建新的从线程或者进程来处理响应。


从1: 由主线程传递来的连接请求(即针对连接的套接字)开始。

从2:用该连接于客户进行交互:读取请求并发回响应。

从3:关闭连接并退出。 在处理完来自客户的所有请求之后,从线程退出。


8.24 服务器并发性的实现

8.25把单独的程序作为从进程来使用



8.26 使用单线程获得表面上的并发性(apparent concurrency)

服务器作为单个执行线程来运行,使用select系统调用进行异步i/o,算法8.5描述单线程服务器要处理多个连接所采取的步骤:


算法8.5

1.创建套接字并将其绑定到这个服务的熟知端口上。将该套接字加到一个表中,该表中的项是可以进行i/o的描述符。

2.使用select在已有的套接字上等待I/O

3.如果最初的套接字准备就绪,使用accept获得下一个连接,并将这个新的套接字加入到表中,该表中的项是可以进行I/O的描述符。

4.如果是最初的套接字意外的某些套接字准备就绪,就使用recv或者read获得下一个请求,构造响应,用send或write将响应发回给客户。

5.继续按照步骤2进行处理。


由单个执行线程实现的并发的、面向连接的服务器。服务器线程等待下一个准备就绪的描述符,这个新的描述符意味着一个新的连接的到达,或者是某个客户在已有的连接中发送了一个请求。


8.27 各服务器类型所适用的场合

真正的和表面上的并发性:只有一个线程的服务器依靠异步I/O管理多个连接:而多线程的实现(不管是多个线程的进程、还是一个进程有多个线程),允许操作系统自动提供并发性。如果创建线程或切换环境的开销很大,或者服务器必须在多个连接之间共享或者交换数据,那么可以使用单线程的方案如果每个从线程可以孤立的运行或者为了要获得最大的并发性(比如在多个处理器上),那么可以使用多进程方案。

原创粉丝点击