【发布时间】:2011-07-13 03:47:16
【问题描述】:
我应该声明,我不是在询问具体的实施细节(目前),而只是对正在发生的事情进行了总体概述。我了解套接字背后的基本概念,并且需要对整个过程进行澄清。我目前的(可能是非常错误的)理解是这样的:
一个套接字不断地监听想要连接的客户端(在它自己的线程中)。当连接发生时,会引发一个事件,该事件会产生另一个线程来执行连接过程。在连接过程中,客户端被分配了它自己的套接字来与服务器通信。然后服务器等待来自客户端的数据,当数据到达时会引发一个事件,该事件会产生一个线程以将数据从流中读取到缓冲区中。
我的问题是:
我的理解有多差?
是否每个客户端套接字都需要自己的线程来监听数据?
如何将数据路由到正确的客户端套接字?这是由 TCP/UDP/内核的胆量处理的吗?
在这种线程化环境中,通常共享什么样的数据,争用点是什么?
任何澄清和补充解释将不胜感激。
编辑:
关于通常共享哪些数据和争用点的问题,我意识到这更多的是实现细节,而不是关于接受连接和发送/接收数据的一般过程的问题。我查看了几个实现(SuperSocket 和 Kayak),并注意到会话缓存和可重用缓冲池之类的一些同步。随意忽略这个问题。感谢您的所有反馈。
【问题讨论】:
-
你读过科默的书吗? cs.purdue.edu/homes/dec/netbooks.html请购买并阅读其中一两本。这被彻底覆盖了。
-
“在这种线程化环境中,通常共享什么样的数据” 答案是“所有数据都由线程化应用程序共享”。这就是定义。为什么这么问? “争论的焦点是什么?”请澄清这一点; “争论点”可能意味着任何事情。 "
标签: multithreading sockets tcp asyncsocket