我在头脑中传递了一些想法,关于如何在维护KISS的同时实际包含大量使用IO类型体系结构的连接。通过网络上的例子,似乎大多数使用CONTAINING_RECORD的双/单链表。而且,作为IO服务器的新手(尽管每天都在改进),我也使用链接列表容器来实现IO体系结构。C++ IOCP服务器容器信息
我的问题是,为什么不能为我的连接使用单/双链表,我为什么不能建立一个大数组并使用CONTAINING_RECORD?我可以使用STL矢量吗?这会起作用吗?另外,什么是其他类型的容器与大规模IO服务器的最佳配合。
我正在为我的游戏服务器重新编写服务器架构(经过多次修改),并且希望这次能够朝着正确的方向前进,因为id不必在不久的将来再次重写它。
谢谢你的时间,并回复。
编辑:目前我的服务器架构(简单地说):
Main thread listening and accepting -> Pass over the socket into a container.
Worker threads(2-3) grab IO events for the container of sockets.
Worker threads Read/Write Data on that container.
主线程和工作线程都使用一个链表。我想摆脱这一点。
如果您使用'select'或'poll'来检查连接状态,您可能还想考虑'std :: unordered_map',并将套接字描述符作为关键字。当然,你可以将容器组合起来,例如使用'std :: map'作为'std :: shared_ptr'的快速套接字查找作为指向另一个容器中实际结构的数据。 –
@JoachimPileborg在Unix上,''select'或者'poll'(或者更好,'epoll','kqueue')是一个好主意,或者没有IOCP的WinCE,但@Ohmages是正确的关注IOCP的,它是在Windows上执行可伸缩服务器的方式。 – asveikau
@Ohmages - 如果有多个线程耗尽IOCP,我将远离向量,重新分配可能会改变跨线程同步的痛苦地址。 – asveikau