Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将MB的数据从PHP传递到Javascript_Php_Javascript_Canvas - Fatal编程技术网

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

如何将MB的数据从PHP传递到Javascript,php,javascript,canvas,Php,Javascript,Canvas,我正在开发一个基于回合的策略游戏,其中我从PHP输出一系列数组,并使用javascript在画布上设置动画 考虑到我的目标是javascript/画布中每秒20帧(frames per second),php正在生成大量信息供浏览器接收和处理 如何将这些php数组传递给javascript 编辑 我特别提到的数据量约为每轮5兆字节。我想有两个问题您正试图回答 如何将数据从php传递到javascript php和javascript之间应该以什么格式传递数据 就第一季度而言: 有几种技术可供选择

我正在开发一个基于回合的策略游戏,其中我从PHP输出一系列数组,并使用javascript在画布上设置动画

考虑到我的目标是javascript/画布中每秒20帧(frames per second),php正在生成大量信息供浏览器接收和处理

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

编辑
我特别提到的数据量约为每轮5兆字节。

我想有两个问题您正试图回答

  • 如何将数据从php传递到javascript
  • php和javascript之间应该以什么格式传递数据
  • 就第一季度而言: 有几种技术可供选择,如果你对你的项目不多了解一点,没有一种技术能提供明显的优势。您可以使用:

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

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

    在不了解更多项目的情况下,很难选择一个最佳解决方案,但我希望此列表可以帮助您开始。

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

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

    这就是说,你真的应该看看你需要什么样的数据来支持你的游戏,因为5mb比一般的要多得多

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

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

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

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


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

    为什么不用JavaScript生成这些数据?您可以使用socket@skydiver进行查看-如果游戏引擎不是公共的,我更喜欢…@crayon暴力,干杯,我现在正在查看,thanks@Gamemorize嗯。。这些数据都需要在服务器中计算吗?也许您可以将一些基本数据从服务器传输到客户端,并从这些基本数据生成其他数据(如动画数据)。谢谢+1,答案很好地解释了选项。不确定这些是否都是选项。例如,FTP是一个选项吗?就个人而言,我知道什么时候需要调用下一个回合,所以它将是AJAX,使用JSON一直是我的默认想法,我的疑问-个人-也是如果这也是“最佳”格式。我同意,这肯定不是一个详尽的选项列表,而是一些更明显的选择。然而,我不认为这真的是一个“哪种技术”的问题。我认为这是一个架构问题,markE的回答更合适。特定的技术可以给您带来一些改进,可能是百分之几,但是架构的选择会产生一个数量级的影响。至于你的最后一个问题,FTP并不是一个真正的选择,除非你愿意使用java或flash进行插件开发;Javascript无法连接到FTP服务器。感谢+1提供更多选项。数据很多,但作为一个TBG(因此不需要交互),它输出一个迷你电影,可以观看3-5分钟(想象一场足球比赛或一场战斗)。客户将要做很多工作,您的考虑都是正确的(并且已经完成)。啊…视频。你可以考虑建立一个视频流——或者关闭你自己的服务器,或者离开像Vimeo这样的主机服务器。使用vimeo,您可以允许/禁止每个人访问您的流。或者,显示视频的一种非常有效的方式是渐进式下载,您可以将视频分解为多个部分,用户可以开始在后台异步下载第1部分,而第2部分-x部分。干杯,但这不是视频,而是由php数组通过sprite sheets/js和canvas生成的动画,可以持续3-5分钟-基于回合输出视频的游戏是一个很酷的主意!仍然…渐进式下载仍然适用。让用户在后台异步下载剩余的4mb时查看前1mb。我知道,您可能需要修改部分或全部sprites/js,但快速/无缝地查看5mb数据不是您想要的吗!重要补充:SpriteSheet是客户端预加载和缓存的理想选择。这是一个我们将要研究的想法,我真的没想到会有这么多人对5MB数据进行“重新思考”。但作为