请帮我澄清这个概念。假设我们有使用线程实现的套接字端口服务器。套接字服务器侦听套接字端口,并在消息到达时创建一个线程来为请求提供服务。
客户端代码将给定数量的消息发送到服务器。此客户端代码也可以由多个用户从不同的计算机运行。我理解客户端代码代码是作为单独的进程运行的。这是单独的进程向服务器发出请求,然后由服务器线程处理。
因此,客户端处理堆栈,用户地址空间,进程控制块等是否会传递给处理其请求的服务器线程。
同样,如果它是文件服务器并且服务器线程实现了文件打开请求,则fd是服务器文件描述符表或调用进程的一部分。
能够获得我能读到的材料的任何链接。 谢谢
答案 0 :(得分:4)
不,客户端和服务器是不同的进程,甚至可能在不同的机器上运行。
客户端会要求操作系统(通过库)向服务器发送网络消息,服务器的操作系统将解压缩它们并将它们(通过库)引导到服务器进程中。
现在“客户端处理线程”是另一回事,它们是服务器进程的子组件,在您的设置中,其中一个线程(处理网络另一端的客户端)将接收数据和做任何需要的事情(如有必要,可能包括答复)。
在文件服务器情况下,操作系统提供的文件描述符永远不会“离开”文件服务器。文件服务器客户端创建镜像远程计算机内容所需的任何内容。这样的镜像可能包括文件描述符,但它们肯定与驻留在服务器上的文件描述符不同。客户端文件描述符绑定到采用所请求操作并将其转换为网络调用的代码,而服务器文件描述符(可能)直接访问磁盘上的块。
答案 1 :(得分:0)
'套接字服务器侦听套接字端口,当消息到达时,创建一个线程来为请求提供服务。几乎。在这种类型的服务器设计中,当服务器侦听线程接受来自客户端的连接时,将创建(或取消)一个新的客户端 - 服务器线程。此客户端 - 服务器线程传递由侦听器线程accept()调用分配的客户端 - 服务器套接字实例。然后,客户端 - 服务器线程通常从客户端 - 服务器套接字读取以获取消息,HTTP GET / POST等等。
'客户端代码将给定数量的消息发送到服务器。此客户端代码也可以由多个用户从不同的计算机运行。据我所知,客户端代码代码是作为单独的进程运行的。这是单独的进程向服务器发出请求,然后由服务器线程处理。是十岁上下。一个盒子上的一个客户端可能有多个线程的多个连接,但你的权利是99.99%。
因此,客户端处理堆栈,用户地址空间,进程控制块等是否会传递给处理其请求的服务器线程。没有!那将是一场绝对的噩梦!
同样,如果它是文件服务器并且服务器线程实现了文件打开请求,则fd是服务器文件描述符表或调用进程的一部分。
客户端 - 服务器线程打开的文件/任何内容。客户端 - 服务器线程分配的所有资源/句柄都属于服务器。
RGDS, 马丁