【发布时间】:2011-04-17 19:20:41
【问题描述】:
我正在建立一个网站,玩家可以在其中玩虚拟积分的回合制游戏(类似于扑克网站,但有所不同)。我想出的设置:
- 一个数据服务器,包含所有玩家帐户和相关数据(数据库+服务)。如果有帮助,可以将数据库和 API 拆分为两个服务器。
- 一个或多个为网站提供服务的网络服务器,在需要时连接到数据服务器。
- 一个大厅服务器,玩家可以在其中找到彼此并设置游戏(可以多个,但用户友好性较差)
- 运行游戏的多个游戏服务器(所有规则等都在服务器上,客户端只是一个远程控制和查看器),带有一个负载平衡器。
- 游戏客户端
客户端将使用 Flash 制作,网络服务器将使用 PHP。剩下的都是Java。
通讯
- 玩家登录网站。网络服务器将用户名/密码发送到数据服务器,数据服务器创建一个会话密钥(如 cookie)
- 播放器启动客户端。客户端连接到大厅服务器,传递会话密钥。大厅服务器与数据服务器检查此密钥
- 创建大厅并且必须开始游戏后,大厅服务器会从负载平衡器中获取游戏服务器并在此游戏服务器上设置游戏。
- 大厅服务器通知客户端连接到游戏服务器并开始游戏。
- 游戏结束后,游戏服务器会通知大厅服务器。大厅服务器将检查分数并更新数据服务器中的积分。
协议:
- Java 到 Java:RMI
- PHP 或 Flash 到 Java:通过套接字自定义二进制协议。该协议支持在空闲时关闭套接字,同时保持虚拟连接处于活动状态和可恢复状态。
如果客户有他的意愿,该网站将需要支持成千上万的并发玩家。有了这些信息,您能看到我的设置中的任何瓶颈吗?我个人有点担心只有一个数据服务器的存在,但我不知道如何拆分它。也欢迎其他可扩展性(或其他)评论。
【问题讨论】:
-
@更接近:这不属于服务器故障,因为它不是通过简单添加服务器来解决的,而是必须在开发阶段设计。
-
您的实际问题似乎与扩展数据库和定位瓶颈有关。这确实更像是一个 DBA 问题而不是开发人员问题。开发人员也许可以帮助改进表格设计,但您没有发布有关表格的任何详细信息。也高度依赖于未命名的数据库实际上是什么。 - 需要为游戏成功完成而准备的大厅对我来说似乎是一个设计问题。如果我的游戏结束时大厅服务器关闭了一段时间,如果你输掉了我的游戏结果,我会很高兴的。
-
@Affe:我可以改变它,大厅服务器告诉数据服务器游戏已经开始,游戏服务器在游戏结束时告诉数据服务器,无需大厅参与。
标签: java php flash networking scalability