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


How to pass MBs of data from PHP to Javascript

我正在开发一款回合制策略游戏,其中我从PHP输出一系列数组,使用javascript在画布上动画。

考虑到我的目标是20fps(帧每秒)在javascript/canvas的php产生了大量的信息,浏览器接收,然后处理。

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

编辑我特别提到的数据量大约是每回合5兆字节。

我想你想要回答两个问题。

  1. 如何从php传递数据到javascript?
  2. 什么格式的数据应该在php和javascript之间传递?

用Q1表示:有几种技术可供选择,如果不了解您的项目,没有一种技术能够提供明显的优势。您可以使用:

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

关于Q2:

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

在不了解你的项目的情况下,很难选择一个最好的解决方案,但我希望这个列表能让你开始。

好吧,如果你必须发送5mb,你能做的最好的事情就是:

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

也就是说,你真的应该考虑重组你需要什么数据来支持你的游戏,因为5mb的数据比一般的数据多得多!

你没有给我们任何具体的细节,所以这里有一个"稻草狗"供我们玩:假设你的游戏是国际象棋。(我知道它不是,但我们需要一些东西来集中我们的注意力)

将所有渲染移动到客户端。您发送的数据应该只发送移动("rooka6")。客户端获取该数据,并以图形方式呈现车从当前位置移动到A6上的新位置。

将游戏逻辑移动到客户端。客户端应该能够独立地对游戏条件做出反应。例如,当玩家试图将他的国王置于危险境地时,客户应该"撤销"一个动作。类似地,如果您为一个复杂的移动发送数据,如("城堡国王方"),客户端应该知道如何适当地移动国王+车,而不需要从您的数据中解释。

做一些模式识别来简化/减少发送的数据。因此,要设置棋盘上所有32个棋子的初始位置,你可以发送("Reset")而不是("移动白卢克- a1,移动白骑士- b1…等等")。

使用信号量控制游戏资源的可用性。如果你的游戏部分要求用户获取/使用一组常见的稀缺资源,那就使用信号量让用户"签出"/"签入"资源,而不是实际追踪单个资源。