Unix Sockets 简明教程

Unix Socket - Client Server Model

大多数网络应用程序都使用客户端-服务器架构,它表示两个进程或两个应用程序彼此通信以交换一些信息。两个进程之一充当客户端进程,另一个进程充当服务器。

Client Process

这是该进程,它通常会请求信息。收到响应后,该进程可能会终止或可能会执行一些其他处理。

Example ,互联网浏览器作为客户端应用程序运行,它向 Web 服务器发送请求以获取一个 HTML 网页。

Server Process

这是从客户端获取请求的进程。从客户端获取请求后,此进程将执行必需的处理,收集请求的信息并将其发送给请求方客户端。完成后,它将准备好为另一个客户端提供服务。服务器进程始终处于警报状态并随时准备服务传入请求。

Example - Web 服务器不断等待互联网浏览器的请求,并且一旦它收到来自浏览器的任何请求,它就会挑选请求的 HTML 页面并将其发回该浏览器。

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

2-tier and 3-tier architectures

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

  1. 2-tier architecture − 在此架构中,客户端直接与服务器交互。这种类型的架构可能存在一些安全漏洞和性能问题。Internet Explorer 和 Web 服务器使用两层架构。在此,使用安全套接字层 (SSL) 来解决安全问题。

  2. 3-tier architectures − 在此架构中,另一个软件位于客户端和服务器之间。此中间软件称为“中间件”。使用中间件来执行所有安全检查并在负载量大的情况下进行负载平衡。中间件从客户端接收所有请求,并执行必需的身份验证后,将请求传递给服务器。然后,服务器执行必需的处理并将响应发送回中间件,最终中间件将此响应传递回客户端。如果您想实现 3 层架构,那么您可以在 Web 服务器和 Web 浏览器之间放置任何中间件(如 Web Logic 或 WebSphere 软件)。

Types of Server

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

  1. Iterative Server − 这是服务器的最简单形式,其中一个服务器进程服务一个客户端,并且在完成第一个请求后,接收来自另一个客户端的请求。同时,另一个客户端保持等待状态。

  2. Concurrent Servers − 这种类型的服务器运行多个并发进程以一次处理多个请求,因为一个进程可能需要更长时间,并且另一个客户端不能等待这么长时间。在 Unix 下编写并发服务器最简单的方法是为每个客户端派生一个子进程以单独处理。

How to Make Client

用于建立连接的系统调用对于客户端和服务器来说是不同的,但两者都涉及套接字的基本结构。这两个进程都建立自己的套接字。

在客户端建立套接字涉及以下步骤 −

  1. 使用 socket() 系统调用创建一个套接字。

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

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

How to make a Server

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

  1. 使用 socket() 系统调用创建一个套接字。

  2. 使用 bind() 系统调用将套接字绑定到一个地址。对于互联网上的服务器套接字,地址包含主机上的端口号。

  3. 使用 listen() 系统调用侦听连接。此调用通常会阻塞连接,直到客户端连接到服务器。

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

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

Client and Server Interaction

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

socket client server