【问题标题】:Socket server or file server implementation using multiple threads: concept not clear使用多线程的套接字服务器或文件服务器实现:概念不清楚
【发布时间】:2011-06-03 14:49:03
【问题描述】:

请帮我弄清楚这个概念。假设我们有一个使用线程实现的套接字端口服务器。套接字服务器侦听套接字端口,并在消息到达时创建一个线程来为请求提供服务。

客户端代码向服务器发送给定数量的消息。此客户端代码也可以由多个用户从不同的机器上运行。我知道客户端代码是作为单独的进程运行的。Ihat 是单独的进程向服务器发出请求,然后由服务器线程处理。

那么,客户端进程堆栈、用户地址空间、进程控制块等是否会传递给处理其请求的服务器线程。

同理,如果是文件服务器,文件打开请求是由服务器线程实现的,那么fd是服务器文件描述符表的一部分还是调用进程。

如果能获得任何我可以阅读的材料的链接,我将不胜感激。 谢谢

【问题讨论】:

  • 请告诉我为什么我得了负分...不知道不是犯罪
  • 没关系。积分主要是为了保持趣味性而玩的游戏。它与问题的质量只有轻微的关系,有时人们玩游戏很糟糕。您需要学习的是网络,并且有很多与之相关的书籍。我更喜欢 Tanenbaum 的那个,但它非常技术性。但是,如果您确实设法通过它,您将对网络的理解非常低。之后,您只需要学习如何为它编程(这完全是另一回事)。
  • 问题在于,当您专注于网络时,您的很多问题实际上都在于理解操作系统的工作原理。关于操作系统演进的一本好书是 Abraham Silberschatz 的《操作系统概念》。当然,要理解这本书,最好掌握一门编程语言,最好是 C。
  • @Edwin 谢谢。非常感谢您的指点
  • 不客气,祝你好运!

标签: c linux multithreading pthreads


【解决方案1】:

不,客户端和服务器是不同的进程,甚至可能运行在不同的机器上。

客户端将要求操作系统(通过库)将网络消息发送到服务器,服务器的操作系统将解包并将它们(通过库)引导到服务器进程。

现在“客户端处理线程”是另一回事,它们是服务器进程的子组件,在您的设置中,其中一个线程(在网络另一端处理客户端的线程)将接收数据并做任何需要的事情(可能包括回复,如有必要)。

在文件服务器的情况下,操作系统提供的文件描述符永远不会“离开”文件服务器。文件服务器客户端创建镜像远程机器内容所需的任何内容。此类镜像可能包括文件描述符,但它们绝对与驻留在服务器上的文件描述符不同。客户端文件描述符绑定到接受请求操作并将其转换为网络调用的代码,而服务器文件描述符(可能)直接访问磁盘上的块。

【讨论】:

    【解决方案2】:

    '套接字服务器侦听套接字端口,当消息到达时,创建一个线程来为请求提供服务。'几乎。在这种类型的服务器设计中,当来自客户端的连接被服务器侦听线程接受时,会创建(或分离)一个新的客户端-服务器线程。此客户端-服务器线程传递由侦听器线程 accept() 调用分配的客户端-服务器套接字实例。然后,客户端-服务器线程通常从客户端-服务器套接字中读取消息以获取消息、HTTP GET/POST 等。

    '客户端代码向服务器发送给定数量的消息。此客户端代码也可以由多个用户从不同的机器上运行。我了解客户端代码代码作为单独的进程运行。Ihat 是单独的进程向服务器发出请求,然后由服务器线程处理。是的。一个盒子上的一个客户端可能有来自多个线程的多个连接,但你是 99.99% 正确的。

    那么,客户端进程堆栈、用户地址空间、进程控制块等是否传递给处理其请求的服务器线程。不!那绝对是一场噩梦!

    同理,如果是文件服务器,文件打开请求是由服务器线程实现的,那么fd是服务器文件描述符表的一部分还是调用进程。

    客户端-服务器线程打开的文件/文件。客户端-服务器线程分配的所有资源/句柄都属于服务器。

    Rgds, 马丁

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2018-01-05
      • 1970-01-01
      • 2014-10-06
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多