gpt4 book ai didi

C++ IO/多路复用 TCP 服务器和 POSIX 线程

转载 作者:行者123 更新时间:2023-11-28 06:18:22 25 4
gpt4 key购买 nike

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

最佳答案

对架构的粗略尝试...

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

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

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

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

网络线程数是有限制的,不依赖于连接数。

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

逻辑线程数是绑定(bind)的,不依赖于 session 数。

关于C++ IO/多路复用 TCP 服务器和 POSIX 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com