Unix 套接字 - 客户端服务器模型

大多数网络应用程序使用客户端-服务器架构,即两个进程或两个应用程序相互通信以交换某些信息。两个进程中的一个充当客户端进程,另一个进程充当服务器。

客户端进程

此进程通常发出信息请求。在获得响应后,此进程可能会终止或执行其他处理。

示例,Internet 浏览器用作客户端应用程序,向 Web 服务器发送请求以获取一个 HTML 网页。

服务器进程

此进程从客户端接收请求。在获得客户端的请求后,此进程将执行所需的处理,收集所请求的信息,并将其发送给请求者客户端。完成后,它便准备好为另一个客户端提供服务。服务器进程始终保持警惕并准备好处理传入的请求。

示例 − Web 服务器一直等待来自 Internet 浏览器的请求,一旦收到来自浏览器的任何请求,它就会获取请求的 HTML 页面并将其发送回该浏览器。

请注意,客户端需要知道服务器的地址,但在建立连接之前,服务器不需要知道客户端的地址甚至存在。建立连接后,双方都可以发送和接收信息。

2 层和 3 层架构

客户端-服务器架构有两种类型 −

  • 2 层架构 − 在这种架构中,客户端直接与服务器交互。这种类型的架构可能存在一些安全漏洞和性能问题。Internet Explorer 和 Web Server 在两层架构上工作。在这里,使用安全套接字层 (SSL) 解决安全问题。

  • 3 层架构 − 在这种架构中,客户端和服务器之间还有一个软件。这个中间软件称为"中间件"。中间件用于在负载过重的情况下执行所有安全检查和负载平衡。中间件接收来自客户端的所有请求,并在执行所需的身份验证后,将该请求传递给服务器。然后,服务器执行所需的处理并将响应发送回中间件,最后中间件将此响应传回客户端。如果您想要实现 3 层架构,那么您可以在 Web 服务器和 Web 浏览器之间保留任何中间件,例如 Web Logic 或 WebSphere 软件。

服务器类型

您可以拥有两种类型的服务器 −

  • 迭代服务器 − 这是最简单的服务器形式,其中服务器进程为一个客户端提供服务,在完成第一个请求后,它会从另一个客户端接收请求。与此同时,另一个客户端继续等待。

  • 并发服务器 − 这种类型的服务器运行多个并发进程来同时处理许多请求,因为一个进程可能需要更长时间,而另一个客户端无法等待这么长时间。在 Unix 下编写并发服务器的最简单方法是 fork 一个子进程来分别处理每个客户端。

如何创建客户端

客户端和服务器建立连接的系统调用略有不同,但都涉及套接字的基本构造。两个进程都建立了自己的套接字。

在客户端建立套接字所涉及的步骤如下 −

  • 使用 socket() 系统调用创建套接字。

  • 使用 connect() 系统调用将套接字连接到服务器的地址。

  • 发送和接收数据。有多种方法可以做到这一点,但最简单的方法是使用 read()write() 系统调用。

如何创建服务器

在服务器端建立套接字所涉及的步骤如下 −

  • 使用 socket() 系统调用创建套接字。

  • 使用 bind() 系统调用将套接字绑定到地址。对于 Internet 上的服务器套接字,地址由主机上的端口号组成。

  • 使用 listen() 系统调用监听连接。

  • 使用 accept() 系统调用接受连接。此调用通常会阻止连接,直到客户端连接到服务器为止。

  • 使用 read()write() 系统调用发送和接收数据。

客户端和服务器交互

以下是显示完整客户端和服务器交互的图表 −

Socket Client Server