如何将 MB 的数据从 PHP 传递到 Javascript [关闭]

Posted

技术标签:

【中文标题】如何将 MB 的数据从 PHP 传递到 Javascript [关闭]【英文标题】:How to pass MBs of data from PHP to Javascript [closed] 【发布时间】:2013-03-09 13:32:28 【问题描述】:

我正在开发一个回合制策略游戏,我在其中从 php 输出一系列数组,以便使用 javascript 在画布中进行动画处理。

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

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

编辑 我具体指的数据量大约是每转 5 兆字节。

【问题讨论】:

为什么不在 JavaScript 中生成这些数据? 您可以考虑使用套接字***.com/questions/1736382/… @skydiver - 如果游戏引擎不公开,我会更喜欢...... @crayon 暴力,干杯我现在正在看,谢谢 @Gamemorize Omm.. 这些数据都需要在服务器中计算吗?也许你可以将一些基本数据从服务器传输到客户端,并从这些基本数据生成其他数据(如动画数据)。 【参考方案1】:

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

    如何将数据从 php 传递到 javascript? php和javascript之间传递数据应该采用什么格式?

就第一季度而言: 有多种技术可供选择,如果您不了解您的项目,其中任何一种都不会提供明显的优势。你可以使用:

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

就第二季度而言:

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

在不了解您的项目的情况下很难选择一个最佳解决方案,但我希望这份清单可以帮助您入门。

【讨论】:

谢谢+1,很好地解释了选项作为答案。不确定这些是否是所有选项。例如,FTP 是一种选择吗?就我个人而言,我会知道何时需要调用下一个回合,所以它会是 AJAX,并且使用 JSON 是我的默认想法,我想知道 -personal- 是否也是“最佳”格式。 我同意,这绝对不是一个详尽的选项列表,而是一些更明显的选择。但是,我不认为这真的是一个“哪种技术”的问题。我认为这是一个架构问题,markE 的答案更合适。特定技术可以给您带来大约几个百分点的改进,但架构选择可能会产生一个数量级的影响。至于您的最后一个问题,除非您愿意使用 java 或 flash 沿着插件之路走下去,否则 FTP 并不是一个真正的选择; Javascript 无法连接到 FTP 服务器。【参考方案2】:

好的,如果您必须发送 5mb,那么您可以做的最好的事情是:

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

也就是说,您确实应该考虑重新构建为游戏提供动力所需的数据,因为 5mb 远超一般!

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

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

将游戏逻辑移至客户端。客户端应该能够独立地对游戏条件做出反应。例如,客户端应该“撤消”玩家试图将他的国王置于危险之中的举动。同样,如果您为(“城堡国王侧”)等复杂的移动发送数据,客户端应该知道如何正确移动国王+车,而无需从您的数据中进行解释。

做一些模式识别来简化/减少发送的数据。因此,要设置棋盘上所有 32 颗棋子的初始位置,请发送(“重置”)而不是(“移动白车-A1,移动白骑士-B1……等等”)。

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

【讨论】:

感谢 +1 提供更多选择。数据很多,但作为 TBG(因此不需要交互性),它会输出一部迷你电影,观看时间约为 3-5 分钟(想象一场足球比赛或一场战斗)。客户要做很多工作,而您的考虑都是正确的(并且已经完成)。 啊……视频。您可能会考虑设置视频流——在您自己的服务器或 vimeo 之类的主机服务器之外。使用 vimeo,您可以允许/禁止每个人访问您的流。或者,显示视频的一种非常有效的方式是渐进式下载,您可以将视频分解为多个部分,用户可以开始查看第 1 部分,而第 2-x 部分在后台异步下载。 干杯,但它不是视频,而是由 php 数组通过精灵表/js 和画布生成的动画,可以持续 3-5 分钟 - 一个输出视频的回合制游戏虽然是一个很酷的主意! 仍然...渐进式下载仍然适用。当您在后台异步下载剩余的 4mb 时,让用户查看前 1mb。我知道,您可能需要修改部分或全部 sprites/js,但对于 5mb 数据的快速/无缝查看不是您想要的! 重要补充:spritesheets 是在客户端进行预加载和缓存的理想选择。 这是一个让我们看看的想法,我真的没想到 5MB 的数据会有这么多的“RE-THINK”喘息。但正如你所知,我以前从未发送过如此重的数据包。实际上,我正在寻找甚至不需要如此大的数据包的方法,但 SO Q 仍然存在。

以上是关于如何将 MB 的数据从 PHP 传递到 Javascript [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量和数据从 PHP 传递到 JavaScript?

如何将邮件数据从服务提供商传递到 laravel 4 中的 config/mail.php

如何将 mysql 数字类型数据从 php 传递到 Javascript 以作为字符串类型到达? [关闭]

在 Unity 中,如何将值从一个脚本传递到另一个脚本?

如何将变量作为标准输入从 PHP 传递到命令行

如何将值从一个php页面传递到另一个? [复制]