【发布时间】:2012-11-12 04:47:57
【问题描述】:
我正在使用 c++ 编写一个服务器,该服务器将通过 UDP 连接到多个客户端。我决定最好使用线程池来处理来自给定套接字的传入数据报。
那么,我的问题是,允许每个工作线程调用 sendto 在可扩展性方面是否最好?他们应该在同一个插座上这样做还是最好使用不同的插座?所有流量都将通过一个端口。
从我准备好的情况来看,对 recvfrom 和 sendto 的调用似乎是原子的,我已经有一个专用线程来监听套接字(当前是非阻塞的,并使用调用来确定套接字是否准备好从中读取)。
如果我自己去,我可能会使用不同的套接字来发送和使用多个线程来这样做(假设所有操作都是有效的)。
不确定这会有多大帮助,但这是一般的想法:
【问题讨论】:
-
如果有人想知道我最终要做什么,这是一个每个工人都可以调用 sendto 的模型。正如向我解释的那样,UDP 是一个无状态系统,所以我真的只需要一个用于整个服务器的套接字。我仍然不知道多个套接字是否会发生冲突,所以回答这个问题会很棒。更新模型图在这里:i.imgur.com/S3mMn.png
标签: c++ sockets threadpool