Ten*_*nev 5 c++ sockets multithreading send
我正在为最大 1000 个客户端编写套接字服务器,服务器是关于我的游戏,我使用非阻塞套接字和大约 10 个线程同时从不同的套接字接收数据(第一个线程从 0-100 接收,第二个从 101-200等等..)
但是如果线程 1 要向所有 1000 个客户端发送数据,而线程 2 也想同时向所有 1000 个客户端发送数据,那安全吗?数据在另一(客户端)端是否有可能被弄乱?
如果是,我想唯一可能发生的问题是有时客户端会收到 2 或 10 个数据包作为 1 个数据包,对吗?如果是的话,有什么解决办法吗:(
处理许多套接字的通常模式是使用专用线程轮询 I/O 事件select(2)
,使用poll(2)
、 或更好的kqueue(2)
或epoll(4)
(取决于平台)充当套接字事件调度程序。套接字通常以非阻塞模式处理。然后,可能会有一组线程对事件做出反应,并且直接或通过较低级别的缓冲区/队列进行读取和写入。
从队列到事件订阅白板,各种技术都适用于此。在 I/O 级别上复用接受/读取/写入/EOF 以及在应用程序级别上进行事件仲裁会变得很棘手。有几个库喜欢libevent
并boost::asio
帮助构建较低级别(ACE 库也在这个领域,但我不想向任何人推荐它)。您必须自己提出应用程序级协议和状态机(再次boost::statechart
可能会有所帮助)。
一些很好的链接可以帮助您更好地了解您所面临的问题(这可能是他们在这里提到的第一百万次):
很抱歉没有提供具体的解决方案,但这是一个非常广泛的设计问题,大多数决策在很大程度上取决于上下文(尽管很有趣)。希望这个对你有帮助。
归档时间: |
|
查看次数: |
6264 次 |
最近记录: |