我想将我的游戏开发扩展到多人游戏领域,但是我没有资金购买具有套接字的适当服务器,也没有时间来了解它们的工作原理以及如何正确使用它们并且安全。
然而,我完全有能力通过 PHP 在 Flash 和 MySQL 之间发送和接收各种格式的数据。
如果我要创建一款回合制游戏,以这种方式(通过 PHP)轮询 MySQL 数据库是否合适?目前我的想法是这样的:
- 两个玩家通过开放游戏的全局列表等方式找到对方(相当标准的方法)。
- 在数据库中创建遭遇或类似行。
- 该行将以 JSON 或 XML 格式存储有关轮到谁以及游戏当前状态的信息。该行还将包含每个玩家的时间戳,表示他们上次轮询数据库以获取游戏状态信息的时间。当玩家完成回合时,“回合”字段将会切换。
- 每个玩家都会轮询数据库,看看是否轮到他们了。如果是,则游戏状态信息将与上一轮结束之前的游戏状态信息进行比较,并且屏幕上将发生操作以反射(reflect)差异。然后轮到他们了,然后重复这个过程。
- 在轮询数据库时,如果对手在 120(任意)秒内没有轮询数据库,则玩家将收到其他玩家已离开/超时/其他情况的通知。
这会不会太慢或不可靠?或者是否还有其他可以预见的问题,例如两个玩家同时轮询数据库的结果(不确定这是否重要)?
最佳答案
我建议您研究一种允许将数据从服务器推送到 Flash 客户端的技术,而不是轮询。两个最常见的选项是套接字连接,或使用 Real Time Messaging Protocol , see this question for more details 。这是使用 Flash 构建实时游戏的默认方法。
对于PHP来说,有很多开源产品或框架支持基于RTMP的AMF协议(protocol):
- WebORB for PHP
- Zend Framework AMF Adobe Systems 向 Zend Framework 贡献了对其开放式二进制操作消息格式 (AMF) 协议(protocol)的支持。如果您已经使用 Zend Framework,这非常有用。
- amfPHP
- sabreamf
我个人使用过 Zend Framework AMF,效果很好,也听说过有关 WebORB 的好消息。我没有使用过其他 AMF 库。
关于您的具体问题:我不会将信息以 JSON 或 XML 形式存储在数据库中,因为您想要查询数据。将数据存储为 native SQL 数据的效率要高得多。
这是一个short example showing you how to use Zend Framework AMF让您了解它是如何工作的。
关于mysql - 对于回合制 Flash 游戏来说,轮询 MySQL 数据库是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153439/