【发布时间】:2023-10-30 21:34:02
【问题描述】:
我正在为最多 1000 个客户端编写套接字服务器,服务器是关于我的游戏的,我正在使用非阻塞套接字和大约 10 个线程同时从不同的套接字接收数据(第一个线程从 0-100 接收,第二个从101-200 等等..)
但是如果线程 1 想向所有 1000 个客户端发送数据,而线程 2 也想同时向所有 1000 个客户端发送数据,那安全吗?数据是否有可能在另一端(客户端)被弄乱?
如果是,我想唯一可能发生的问题是有时客户端会收到 2 个或 10 个数据包作为 1 个数据包,对吗?如果是的话,有什么解决办法吗:(
【问题讨论】:
-
同意ckv提供的答案,但我建议重新考虑这种方法。拥有 10 个线程以不同的时间间隔从不同的套接字读取有什么好处?在架构中让线程从套接字和异步处理组件中读取可能会更容易。
-
@Daniel 我猜你的意思是每个套接字都有一个线程。对吗?
-
当其中一个线程正在读取时,大多数线程将处于等待状态。使用
select()之类的东西可能是更好的选择,并且可以降低复杂性。事实上,它甚至可能更快。 -
是的,我对 10 个线程使用 select() 和 fd_set,但我不知道如何让新的 10 个线程使用 select() 进行发送.. 我将如何触发事件fd_set..?
标签: c++ sockets send multithreading