C++ IO/Multiplexed TCP 服务器和 POSIX 线程

C++ IO/Multiplexed TCP Server and POSIX Threads

我必须开发一个简单的 C++ 命令行 client/server 聊天应用程序。此应用程序必须提供一个基本的多人聊天室实现。是否可以将 IO/Multiplexing(select() 系统调用)与 POSIX 线程结合使用? 我的意思是我想创建一个 TCP 服务器,它使用 select() 处理多个客户端,当一个客户端想要与另一个客户端聊天时,服务器创建一个单独的线程,它使用 IO/Multiplexing (select() syscall) ,处理两个客户端之间的通信。 这是一个好主意吗?不然我怎么办?

对架构的粗略尝试...

将您的应用程序构建为两组线程(一组可能仅由一个线程组成)。

一组关注 TCP 连接,每个 TCP 连接都分配给该组中的一个线程,该线程永远运行,轮询分配给它的连接(传入消息)并轮询(每个线程)来自-逻辑队列(传出消息)

另一组介意logic/session。每个会话都分配给一个特定的线程。每个线程永远运行,轮询(每个线程)来自网络的队列(传入消息)。

网络线程集,接收消息并post它们到正确的逻辑队列[假设有一种方法可以将连接映射到内部逻辑会话]。它轮询其源逻辑队列以获取传出消息并发送它们。

网络线程数是绑定的,不依赖于连接数

逻辑线程集,在其队列中接收来自网络的请求,并在给定的会话状态中处理它们,并且(可能)post返回要发送的消息(由网络线程发送) )

逻辑线程数是绑定的,不依赖于会话数