我需要说明的是,我现在不是在询问具体的实现细节,而是需要一个整体概述。我理解socket的基本概念,需要对整个过程进行澄清。目前我的(可能非常错误的)理解是:
一个套接字(socket)在自己的线程中不断地监听客户端连接请求,当连接发生时,会引发一个事件,然后将另一个线程分配给执行连接过程。在连接过程中,为客户端分配一个专用的套接字(socket)与服务器通信。服务器等待来自客户端的数据,当数据到达时,引发一个事件,然后将另一个线程从流中读取数据到缓冲区。
我的问题是:
我的理解有多偏离事实?
每个客户端套接字(socket)是否需要一个线程来监听数据?
如何将数据路由到正确的客户端套接字(socket)?这是TCP/UDP/kernel内部处理的吗?
在这种多线程环境下,通常共享哪些数据,存在哪些争用点?
如果有任何澄清和额外的解释,将不胜感激。
编辑:
关于典型共享的数据和争用点的问题,我意识到这更多是一个实现细节,而不是关于接受连接和发送/接收数据的一般过程的问题。我查看了几个实现(SuperSocket和Kayak)并注意到某些同步内容,例如会话缓存和可重用的缓冲池。可以忽略这个问题。感谢您的反馈。