02-迭代型和并发型服务器
60.1 迭代型和并发型服务器
对于使用Socket(套接字)的网络服务器端程序,有两种常见的设计方式。
- 迭代型:服务器每次只处理一个客户端,只有当完全处理完一个客户端的请求后才去处理下一个客户端。
- 并发型:这种类型的服务器被设计为能够同时处理多个客户端的请求。
在44.8节中我们已经见过一个使用FIFO的迭代型服务器了,在46.8节中也有一个使用System V消息队列的并发型服务器的例子。
迭代型服务器通常只适用于能够快速处理客户端请求的场景,因为每个客户端都必须等待,直到前面所有的客户端都处理完了服务器才能继续服务下一个客户端。迭代型服务器的典型应用场景是当客户端和服务器之间交换单个请求和响应时。
并发型服务器适用于对每个请求都需要大量处理时间,或者是当客户端和服务器在进行扩展对话中需要来回传递消息的场景。在本章中,我们把重点放在并发型服务器的传统(也是最简单的)设计方法上:针对每个新的客户端连接,创建一个新的子进程来处理。每个服务器子进程执行完所有服务于单个客户端的任务后就终止。由于这些子进程能独立地运行,因此可以同时处理多个客户端。服务器主进程(父进程)的主要任务就是为每个新的客户端连接创建一个新的子进程。(这种方法有一个变种,即为每个客户端创建一个新的线程。)
在接下来的几节中,我们将学习迭代型和并发型服务器程序的例子,它们都采用Internet域套接字。这两个服务器都实现了echo服务(RFC 862),这种基本的服务能够返回客户端向其发送的任何内容。