如何将MB的数据从PHP传递到Javascript

时间:2013-03-09 13:32:29

标签: php javascript canvas

我正在开发一个基于回合制的策略游戏,我从PHP输出一系列数组,使用javascript在画布上进行动画制作。

鉴于我的目标是在javascript / canvas中以20 fps(每秒帧数)为目标,php正在为浏览器生成大量信息以便接收然后处理。

如何将这些php数组传递给javascript?

EDIT 我专门提到的数据量大约是每回合5兆字节。

2 个答案:

答案 0 :(得分:1)

我认为您要回答两个问题。

  1. 如何将数据从php传递到javascript?
  2. 在php和javascript之间传递数据的格式是什么?
  3. 就Q1而言: 有几种技术可供选择,没有一种技术可以提供明显的优势,而无需了解您的项目。你可以使用:

    • WebSockets:如果您需要服务器和客户端之间的低延迟,双向通信,或者您需要流式传输数据
    • AJAX:如果您需要以已知的时间间隔或响应事件(用户点击)请求数据
    • Comet / long轮询:如果数据在未知时间从服务器“推送”给你

    就第二季而言:

    • JSON:易于使用,支持很多
    • MsgPack - 更小的数据结构,更快的解析器

    如果不了解更多有关您项目的信息,很难选择一个最佳解决方案,但我希望此列表可以帮助您入门。

答案 1 :(得分:1)

好的,如果你必须发送5mb,你可以做的非常非常好的事情是:

使用数据压缩(如gzip或gzcompress)来减少5毫秒的有效负载。通常,文件可以减少到原始大小的20-25%(在您的情况下降至1-1.25mb)。

那就是说,你真的应该考虑重组你需要的数据来为你的游戏提供动力,因为5mb比典型更重要!

你没有给我们任何具体的工作,所以这里是我们玩的“稻草狗”:假设你的游戏是国际象棋。 (我知道不是,但我们需要把重点放在中心)

将所有渲染移至客户端。您发送的数据应仅发送移动(“Rook-A6”)。客户端获取该数据并以图形方式将Rook从其当前位置移动到A6上的新位置。

将游戏逻辑移至客户端。客户应该能够独立地对游戏条件做出反应。例如,客户应该“撤消”玩家试图让他的国王处于危险境地的举动。同样,如果你发送一个复杂的移动数据(“城堡王方”),客户应该知道如何适当地移动国王+车,而不需要从你的数据中解释。

执行一些模式识别以简化/减少正在发送的数据。因此,要设置棋盘上所有32个棋子的初始位置,您发送(“重置”)而不是(“移动白色Rook-A1,移动白色骑士-B1 ......等等”。)

使用信号量来控制游戏资源的可用性。如果游戏的一部分要求用户获取/使用一组共同的稀缺资源,请使用信号量让用户“签出”/“登记”资源,而不是实际跟踪个人资源。