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