【问题标题】:Socket programming with a thread pool server model in c++使用 C++ 中的线程池服务器模型进行套接字编程
【发布时间】:2012-11-12 04:47:57
【问题描述】:

我正在使用 c++ 编写一个服务器,该服务器将通过 UDP 连接到多个客户端。我决定最好使用线程池来处理来自给定套接字的传入数据报。

那么,我的问题是,允许每个工作线程调用 sendto 在可扩展性方面是否最好?他们应该在同一个插座上这样做还是最好使用不同的插座?所有流量都将通过一个端口。

从我准备好的情况来看,对 recvfrom 和 sendto 的调用似乎是原子的,我已经有一个专用线程来监听套接字(当前是非阻塞的,并使用调用来确定套接字是否准备好从中读取)。

如果我自己去,我可能会使用不同的套接字来发送和使用多个线程来这样做(假设所有操作都是有效的)。

不确定这会有多大帮助,但这是一般的想法:

【问题讨论】:

  • 如果有人想知道我最终要做什么,这是一个每个工人都可以调用 sendto 的模型。正如向我解释的那样,UDP 是一个无状态系统,所以我真的只需要一个用于整个服务器的套接字。我仍然不知道多个套接字是否会发生冲突,所以回答这个问题会很棒。更新模型图在这里:i.imgur.com/S3mMn.png

标签: c++ sockets threadpool


【解决方案1】:

对多个线程使用多个 UDP 套接字没有任何优势,只要它们是非阻塞的,并且使用单个绑定的 UDP 套接字可以更好地满足您声明的要求。这是实现无状态、面向数据报的协议的一部分乐趣。

这是否解决/确认了您的问题?

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2021-12-31
    • 2011-10-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多