我正在开发一种多人游戏(客户端-服务器模型),在扩展服务器方面遇到了麻烦。
我了解大多数游戏甚至都无法达到1万多名玩家,而且我也不认为我的游戏会达到。虽然,如果我很幸运地得到了我想要开发服务器的信息,那么以后它们就不会成为一个巨大的障碍。
我已经在互联网上搜索了很多解决问题的方法,检查了GDC的讨论并检查了本网站上的其他帖子,但是似乎没有一个解决我的特定问题。
我当前的设置在下面,并且所有服务器都使用ENet作为我的网络库以C ++编写。
该服务器处理实际的游戏玩法,并且需要在服务器与其连接的客户端之间发送大量CPU和程序包。但是,该专用服务器由玩家自己托管,因此我根本不必考虑对其进行扩展。
该服务器处理服务器列表,其中包含当前所有正在运行的服务器。
所有游戏服务器每5秒向该服务器发送一个UDP程序包,以表明它们仍然有效。这样,大厅服务器可以保留当前在线的所有服务器的更新列表。
当所有客户端想要获取所有服务器时(这仅在服务器列表屏幕中),所有客户端都将UDP程序包发送到该服务器,并且大厅服务器会发回所有服务器的列表。这种情况很少发生,并且大厅服务器被限制为每秒向客户端发送4台服务器(而不是包含所有服务器的庞大程序包)。
该服务器处理创建帐户,丢失密码,登录名,朋友及其当前游戏状态,发给其他已登录玩家的私人消息以及指定他们拥有的游戏内物品的玩家资料。
所有客户端每隔5秒钟向该服务器发送一个UDP程序包,以表明它们仍然有效,同时还发送其当前正在玩的游戏。然后,服务器将其好友列表发回在线/离线/游戏中状态。这样,他们的朋友可以保留在线/离线/游戏中哪个朋友的更新列表。
它只发送带有玩家动作的消息,否则,例如创建帐户,登录,更改/重置密码,添加/删除/忽略朋友,发给朋友的私人消息等。
我担心的是我的大厅和登录服务器可能无法扩展,并且它们上的流量过多。
1.从理论上讲,它们可以仅托管在一台计算机上吗?还是10 000多名玩家的流量过多?
2.如果可以将它们托管在一台计算机上,那么对于居住在远方的人来说,服务器是否仍然不会出现问题?
在这种情况下,在世界每个区域设置大厅和登录服务器会更好吗?这样做的坏处是,如果玩家居住在欧洲,那么他们将无法看到美国的服务器,并且其他服务器上将不存在他们的帐户和物品。
3.可能牵强,但如果我将两个服务器都重写为改为位于带有数据库的网站上,并使客户端/游戏服务器改为执行Web请求(例如HTTPS或使用特定标头调用php),会不会帮助以某种方式解决我的问题?
您的所有问题和疑问都可以通过基于无服务器云的解决方案AWS Lambda(例如或类似产品)解决。在这种情况下,可伸缩性不是您的问题。只是发展逻辑。这样可以节省您很多时间。
如果您想将服务器作为由您自己的服务器托管的单个应用程序。考虑使用例如Go代替C ++。正是出于这些目的而设计的。我的意思是高负载的Web /网络服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句