我应该声明,我不是在询问具体的实施细节(还),而只是对正在发生的事情的一般概述。我了解套接字背后的基本概念,并且需要对整个过程进行澄清。我的(可能是非常错误的)理解目前是这样的:
一个套接字不断地监听想要连接的客户端(在它自己的线程中)。当连接发生时,会引发一个事件,该事件会产生另一个线程来执行连接过程。在连接过程中,客户端被分配了自己的套接字,用于与服务器进行通信。然后,服务器等待来自客户端的数据,当数据到达时,会引发一个事件,该事件会产生一个线程以将数据从流中读取到缓冲区中。
我的问题是:
我的理解有多差?
每个客户端套接字是否需要它自己的线程来监听数据?
数据如何路由到正确的客户端套接字?这是由 TCP/UDP/内核的胆量处理的吗?
在这种线程化环境中,通常共享什么样的数据,争论点是什么?
任何澄清和额外的解释将不胜感激。
编辑:
关于通常共享哪些数据和争用点的问题,我意识到这更多的是实现细节,而不是关于接受连接和发送/接收数据的一般过程的问题。我查看了几个实现(SuperSocket 和 Kayak),并注意到会话缓存和可重用缓冲池之类的一些同步。随意忽略这个问题。我很感激你的所有反馈。