在大多数在线多人策略游戏中,玩家会建造建筑物并进行攻击以在游戏中获得更好的效果。
但是,有一件事我从未理解过。 玩家可以开始建造一些建筑物,这将持续3个小时。
但是,即使他断开连接,建筑也会不断建成。
当然,这意味着它是服务器端的。
但是为了在构建构建时保持服务器响应,它必须在一个单独的线程上,这就成了问题。
考虑将500个玩家连接到一个服务器,每个服务器建立2个建筑物。 这将占到1000个线程,因此服务器将无法响应。
那怎么做得对呢?我想编写一个类似的游戏(对于带有C#的桌面),但我不知道如何使用高效的多线程来管理服务器端的构造。
答案 0 :(得分:1)
这实际上是一个非常复杂的话题:)
简单的答案是你只有一个实际运行游戏的主要游戏线程。每个玩家打开与服务器的连接。服务器可以处理线程中的每个连接,或者更常见的是使用具有单个网络线程的非阻塞套接字。
在C#中,我使用了在后台使用IOCP的异步套接字方法 - 这意味着你大致有1个线程来管理实际的套接字,然后一个线程池实际上委托在内存中处理数据。
如果这对你没有多大意义,我建议你做一些关于游戏设计和网络的阅读。如果您不想编写自己的网络代码,我建议使用像lidgren这样的东西。