📅  最后修改于: 2020-11-05 04:50:46             🧑  作者: Mango
大多数的Net应用程序使用客户端-服务器体系结构,该体系结构是指两个进程或两个相互通信以交换某些信息的应用程序。这两个进程之一充当客户端进程,另一个进程充当服务器。
这是过程,通常会要求提供信息。获得响应后,此过程可能会终止或可能会执行其他一些处理。
例如,Internet浏览器用作客户端应用程序,该应用程序向Web服务器发送请求以获取一个HTML网页。
这是从客户端接收请求的过程。从客户端收到请求后,此过程将执行所需的处理,收集请求的信息,然后将其发送给请求者客户端。完成后,就可以为其他客户提供服务了。服务器进程始终保持警惕,随时可以处理传入的请求。
示例-Web服务器一直等待来自Internet浏览器的请求,并且一旦它从浏览器收到任何请求,它就会拾取请求的HTML页面并将其发送回该浏览器。
请注意,客户端需要知道服务器的地址,但是在建立连接之前,服务器不需要知道地址或什至客户端的存在。建立连接后,双方都可以发送和接收信息。
客户端-服务器架构有两种类型-
2层体系结构-在此体系结构中,客户端直接与服务器交互。这种类型的体系结构可能存在一些安全漏洞和性能问题。 Internet Explorer和Web Server在两层体系结构上工作。使用安全套接字层(SSL)可以解决安全问题。
3层体系结构-在此体系结构中,客户端和服务器之间还有一个软件。该中间软件称为“中间件”。中间件用于在负载很重的情况下执行所有安全检查和负载平衡。中间件接收来自客户端的所有请求,并在执行所需的身份验证后,将该请求传递给服务器。然后,服务器执行所需的处理,并将响应发送回中间件,最后,中间件将此响应传递回客户端。如果要实现3层体系结构,则可以在Web服务器和Web浏览器之间保留任何中间件,例如Web Logic或WebSphere软件。
您可以拥有两种类型的服务器-
迭代服务器-这是最简单的服务器形式,其中服务器进程为一个客户端提供服务,并在完成第一个请求后,从另一个客户端获取请求。同时,另一个客户一直在等待。
并发服务器-此类服务器运行多个并发进程来一次处理多个请求,因为一个进程可能花费更长的时间,而另一个客户端无法等待那么长时间。在Unix下编写并发服务器的最简单方法是派生一个子进程来分别处理每个客户端。
对于客户端和服务器,用于建立连接的系统调用有些不同,但是两者都涉及套接字的基本构造。这两个进程都建立自己的套接字。
在客户端建立套接字的步骤如下-
使用socket()系统调用创建一个套接字。
使用connect()系统调用将套接字连接到服务器的地址。
发送和接收数据。有很多方法可以做到这一点,但是最简单的方法是使用read()和write()系统调用。
在服务器端建立套接字的步骤如下-
使用socket()系统调用创建一个套接字。
使用bind()系统调用将套接字绑定到一个地址。对于Internet上的服务器套接字,地址由主机上的端口号组成。
用listen()系统调用监听连接。
接受与accept()系统调用的连接。此调用通常会阻塞连接,直到客户端与服务器连接为止。
使用read()和write()系统调用发送和接收数据。
下图显示了客户端和服务器的完整交互-