【发布时间】:2013-10-17 15:59:18
【问题描述】:
我有一个关于可扩展性的问题。假设我有一个多人游戏,比如 Uno,服务器处理所有事情。 (为简单起见,假设这是一个纯文本游戏)。例如,要在客户端获取信息打印给用户,服务器可能会发送PRINT string,或CHOOSE data(选择要玩的牌)等。在这方面,客户端是“哑巴”,而服务器处理游戏逻辑。
这是如何在协议级别上工作的一个简单示例:
服务器发送:PRINT Choose a card
服务器发送:CHOOSE Red 1,Blue 1(用户显示按钮或其他东西,然后选择红色 1)
客户端发送:Red 1
假设我有这样的架构:
Player Class:存储用户拥有的卡片,可能是一些可以发送 PRINT 数据的方法(例如 tellData(String data),sendPM()可以私信用户)
服务器类:处理身份验证,允许用户创建新游戏,向用户显示他们可以加入的游戏列表
游戏类:处理用户打牌,处理轮到新玩家的操作,调用玩家类上的方法,如tellData()、pickCard() 等
我将如何扩展它以在多台计算机上运行服务器? 现在,所有用户都连接到一个服务器,并且需要 Player、Server 和 Game 类与每个用户交互其他。如果有人可以提供一些建议,和/或向我指出一些很好的资源/书籍,将不胜感激(不,这不是家庭作业或企业的东西,这只是一个个人项目和好奇心矿)。在可扩展性方面,我希望能够添加另一台服务器,并处理玩家的额外负载——但最多并发连接数为 1000。
另外,如果我们添加更多游戏,这是否会变得更加难以应对可扩展性挑战?
此外,存储游戏数据的最佳方式是什么?在 SQL 数据库中,或序列化对象,还是什么?我的意思是,假设有 3 个用户在玩 Uno 游戏,并且想稍后再玩。我不想永远将他们的卡片和有关游戏的信息存储在 Player/Server/Game 类 (RAM) 中 - 我想将其转储到某个地方,因此当用户登录时,可以从中加载信息,但是这是转储到 RAM,然后是适当的 Player/Game 对象。
最后,我怎样才能对服务器进行更改而不必杀死它并重新启动它?假设服务器是用 Java 或 Python 编写的。
如果有人可以提供建议或一些资源,我们将不胜感激 - 这包括更改我最初陈述的架构。
感谢大家的帮助!!
编辑:你们有什么好的书籍或演讲推荐吗?
【问题讨论】:
标签: mysql web-services scalability scaling horizontal-scaling