我制作了一款游戏(仍然处于测试阶段,需要改进,还有其他东西),我想知道我是否有更好的方法来处理游戏服务器。 (用C#编程)
玩游戏的过程是这样的: 客户端应用程序(播放器)→连接到大厅服务器→检查他喜欢玩的游戏的可用房间→大厅回答请求并将玩家指向正确的游戏服务器(全部使用“原始”TCP /套接字)。
每个游戏服务器在房间内至少有4名玩家(可能有多个房间)且最多12个玩家时自动启动游戏。每个房间都在不同的线程中启动,我的意思是,我每个房间创建一个线程( 4-12个玩家),所以如果我有1.200(游戏服务器可以预期更多)那么将至少有100个线程(甚至更多,取决于每个房间真正有多少玩家)。 主线程(并且是工作)加上创建的所有线程将占用我服务器中的所有资源...所以,我想知道是否有人可以提出更好的想法或方法?
保持我的所有连接是异步的,除了在房间里,我的意思是,在房间里服务器必须等待一个玩家的移动(如Ludo游戏或下注)让下一个玩家(在房间)也这样做。事实上,进行移动的按钮仅对转向移动的玩家启用。出于这个原因,适当的传输是同步的,当有人移动时,其余的接收他们各自的通知。
答案 0 :(得分:1)
如果你可以在同一个线程中等待多个套接字(我不知道它可能是特定于操作系统的),你可以明确地将传入数据与特定套接字关联起来(我认为你应该这样做) ,然后您可以在同一个线程中按顺序为所有房间(或只是几个)提供服务,从而节省操作系统和每个线程堆栈中的每线程数据结构。您可能需要实现某种状态机来实现并重新构建数据结构。
答案 1 :(得分:0)
来自MUD开发背景,这种事情的通常过程是处理“心跳”模型:
这就是我在编写聊天服务器,谈话者和MUD时总是这样做的,听起来它也非常适合你的要求。
HTH