【发布时间】:2012-01-11 02:21:05
【问题描述】:
我正在制作一个在线游戏,我将在其中托管一个游戏服务器。玩家将登录到我的游戏服务器。然后他们将被带到一个大厅,在那里他们可以选择一个游戏加入。我将记录输赢和其他一些统计数据。
我的要求如下:
- 在游戏中的任何时候,玩家都应该能够点击另一个 玩家并获取他们最新的最新统计数据。
- 玩家也应该能够访问我的网站并获得相同的 统计数据。 (理想情况下,立即更新,但不如 游戏中)
- 我还将有一个排行榜,该排行榜将根据以下数据生成 网站。
我的问题是:这种情况通常会使用什么类型的解决方案?
我永远不会丢失数据,这一点至关重要。使用网站数据库让我担心的一件事是数据丢失。
我也不确定网站数据库和游戏服务器之间的交互是如何工作的。 mySQL 有能力做这种事情吗?我对使用网站数据库的另一个担忧是我每月会消耗多少带宽。我慷慨地估计,在任何给定时间,我都会有 1000 人在线。一场比赛大约持续20分钟。
这些类型的情况通常如何解决?我已经翻遍了,但我还没有找到一个明确的答案来解决我的担忧。
谢谢
【问题讨论】:
-
如果您的游戏统计数据足够重要以至于需要保持最新状态,我还建议您考虑安全性。您可以查看开发人员需要防御的 OWASP 十大安全漏洞。如果您的游戏统计数据被骗,您可以忽略此评论。具体看SQL注入攻击。
-
@Dessus 如果用户从不直接与数据库交互,只能从静态服务器ip修改数据库怎么办?
-
用户可以通过文本框输入信息与数据库进行交互。如果我在文本框中输入了正确的 sql。它可以(取决于大多数人如何设置它)直接进入数据库。你的数据库在哪里并不重要。最终以某种方式从数据库中获取数据以显示/更新。我可能会使用网站自己的基础设施来执行我想要的任何 sql(除非你采取措施防止 SQL 注入)。它实际上是一件非常可怕的事情,我相信新闻说它被用于攻击索尼,他们丢失了人们的信用卡详细信息。
-
@Dessus 如果我不允许在文本框中输入字符串“sql”怎么办?
-
通常可以使用参数化查询。即将你的 UI 数据输入一个 sql 参数。如果您从文本框中删除 sql 关键字,这是一种黑名单方法,您可能会错过某些引入 sql 的关键字。有了安全性,您真的需要一种白名单方法。即只有有效请求才能有效的一种。如果您参数化您的 sql 请求,您可以在没有安全风险的情况下允许在文本框中输入位置。见这里:codinghorror.com/blog/2005/04/…