Unix Socket - 客户端服务器模型


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

客户流程

这是通常发出信息请求的流程。在得到响应之后,这个过程可能会终止或者可能会做一些其他的处理。

例如,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()系统调用发送和接收数据。

客户端和服务器交互

下图显示了完整的客户端和服务器交互 -

套接字客户端服务器