如何将 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将邮件数据从服务提供商传递到 laravel 4 中的 config/mail.php