【问题标题】:Best method for Flex to PHP communication?Flex 与 PHP 通信的最佳方法?
【发布时间】:2009-03-16 20:57:52
【问题描述】:

在 Flex 和 PHP 之间进行通信的最佳方法是什么?

过去,我们将 AMFPHP 与 AS2 一起使用,它在大多数情况下都运行良好(AMFPHP 的优势在于它还具有 JSON 模式,可以让您通过 Javascript 或 Actionscript 前端无缝使用相同的远程 PHP) .

但是,AMFPHP 似乎不再真正维护了。那么人们建议用什么来代替它呢?到目前为止,我发现的是:

  1. Zend_AMF(对我们来说看起来太复杂了,否则我们没有使用 Zend 框架)
  2. AMFPHP(有一些更新支持 Flex,看起来相当稳定,但不确定是否长期支持)
  3. XML(AS3 有很好的 XML 处理例程,但在 PHP 方面比较麻烦)
  4. WebORB(我没有这方面的经验)
  5. Roll-our-own 使用 JSON 或其他一些数据到文本的序列化系统(php 的 serialize()、XML 等)

我主要倾向于 AMFPHP,即使是因为它的缺点,因为我已经习惯了。有什么理由我应该考虑改用其他东西吗?

【问题讨论】:

    标签: php xml apache-flex amfphp weborb


    【解决方案1】:

    如果您想进行快速高效的通信,我强烈建议您坚持使用 AMF protocol 而不是 REST 或 JSON 自定义格式。

    ZendAMF 其实不是很混乱。GotoAndLearn的介绍教程,很简单。

    您知道,来自 AMFPHP 的some of the developers 转而从事 ZendAMF 工作。所以从某种意义上说,ZendAMF 就是 AMFPHP 的延续。

    【讨论】:

      【解决方案2】:

      ZendAMF 不错的短读 - http://theflashblog.com/?p=441

      对我来说,这很简单。 Zend 框架是目前最好的 php 框架之一,现在您可以与 Flash 客户端对话。最重要的是 Adob​​e 支持,这在我的书中已经完成。

      替代方案:

      用于 php 的 WebORB http://www.themidnightcoders.com/products/weborb-for-php

      AMFPHP http://www.amfphp.com 如果您阅读上面的网址,您可能会知道为什么我不再关注它。

      【讨论】:

        【解决方案3】:

        我不能告诉你什么是最好的(因为这可能有点主观),但我能做的就是告诉你我最近的一个项目。

        由于这是一个非常丰富的网络应用程序,并且对服务器的数据请求会很频繁,因此我想确保请求的大小尽可能小。这意味着选择 JSON 作为格式。

        接下来,由于应用程序的性质以及我的 flash/flex 开发人员在 1000 英里之外的事实,我需要一个简单且无状态的 API。这最终导致我们使用 HTTP + REST。

        所以,我的应用程序的通信层是一个简单的 Zend Framework 支持的 REST 资源集,其 URI 类似于

        user/10
        review/15
        location/8/reviews
        

        它们都返回 JSON。所有错误也有一个通用的 JSON 格式(异常被捕获并转换为 JSON 对象),以便 Flash 客户端可以轻松处理故障。

        【讨论】:

        • 感谢您的意见。 AMF 与 JSON 相比的优势在于它是一个二进制协议,因此在数据大小和编码/解码速度方面,它实际上会比 JSON 更高效。
        • 您始终可以使用 gzip 压缩的内容,因此您可能希望坚持使用 JSON - 它更易于调试 - AMF 通常需要使用诸如 Charles 之类的 Web 代理进行调试。
        • 我很想对任何再次提及 REST 的人投反对票。如果不使用 Flash 通信 API 的替代品,Flex 根本无法进行 REST。
        • @Samuel:索拉。我真的应该说类似 REST。我们在服务器上捕获异常并将 500、404 等转换为 JSON 错误数据并强制响应 200。不理解 HTTP 响应是 flex 唯一的主要 REST 弱点:blogs.adobe.com/kiwi/2006/07/…
        • 您忘记了不使用代理就无法进行实际的 RESTful 调用,这是一个巨大的弱点。
        【解决方案4】:

        如果您不使用 Zend 之类的框架,那么常规的 ol AMFPHP 仍然很棒,如果没有其他原因,它很简单。我想如果你觉得舒服,为什么不去呢?这些 AMF 接口的作用在于它们真的不需要做太多事情,而 AMFPHP 在类映射、记录集解析为 ArrayCollection、性能出色......它被压缩了。与 Charles 结合的服务浏览器也覆盖了我。

        我无法理解 ZendAMF 工作与原始 AMFPHP 之间的关系。虽然我可以挖掘,但我只是说关注 Nabble 上的 AMFPHP 邮件列表,阅读 Wade Arnold 的博客......这并不完全清楚。

        【讨论】:

        • 是的,我从很久以前就开始使用 AMFPHP,我只是重新考虑那个选择,因为 AMFPHP 的未来对我来说不是很清楚,也许是一个新的、更好的库/网关自 AS3 推出以来的几年中一直在编写。但现在看来坚持使用 AMFPHP 是最好的
        【解决方案5】:

        您应该考虑使用 Zend AMF。 Zend 框架被设计为一个选择框架,因此为您的应用程序选择单个组件(在本例中为 Zend AMF)是完全可以的。

        Zend AMF 非常易于使用。您所要做的就是指定要公开的函数/类,并指定到动作脚本类的类映射。其他一切都非常透明。

        【讨论】:

          【解决方案6】:

          此链接是一个截屏视频,展示了如何使用 WebORB for PHP WDMF(WebORB Data Management for Flex)。

          http://www.themidnightcoders.com/products/weborb-for-php/developer-den/screencasts/weborb-data-management-for-flex-and-php.html

          【讨论】:

            【解决方案7】:

            在所有涉及 Flash 和 PHP 后端的项目中,我使用 AMFPHP 或 XML 请求。

            AMFPHP 确实简化了理解应用程序以供将来维护,尽管它将整个事情与特定技术联系在一起,并且在服务器端涉及一些额外的开销 - 以创建所有需要的类。

            按照 XML,您在这里获得的是标准 REST Web 服务,它不依赖于 Flash(例如,您也可以从桌面应用程序中提取数据,而使用 JSON 或任何其他依赖于浏览器的技术不允许这样做)。

            如果您想要 100% 的未来“支持”,那么我建议您完全不需要任何支持:XML。

            【讨论】:

            • json是如何依赖浏览器的?
            • 我很想对任何再次提到 REST 的人投反对票。如果不使用 Flash 通信 API 的替代品,Flex 根本无法进行 REST。
            • @rick:我的意思是 JSON 需要浏览器才能工作。如果您使用的是桌面应用程序,那么您将无法访问该 Web 服务。
            • @Samuel:你的意思是 Flex 不能发出一个简单的请求来获取 XML 然后解析它,然后回发?我不相信……
            • 当然可以,不能做的是REST。简单的 HTTP 请求不是 REST。
            【解决方案8】:

            使用SimpleXML,PHP 上的 XML 会简单很多。

            我只是使用 JSON 作为对 PHP api 的简单调用的返回值。

            【讨论】:

              【解决方案9】:

              我肯定会选择 WebORB。我在以前的工作中将它与 .NET 一起使用,使用它进行编码是一种乐趣。它的易用性和经过深思熟虑的管理控制台使其学习速度非常快,并且它的文档非常完整;我知道留在 AMF 是很诱人的,因为它是你已经知道的,但我相信 WebORB 值得一试。

              看看这个screencast for Actionscript generation with PHP,很花哨。

              干杯。

              【讨论】:

              • 截屏视频展示了如何使用动作脚本生成......但没有说明为什么,或者它比旧方法有什么优势。只是为了让您在远程服务的代码编辑器中自动完成?
              • 此外,还有一个更好的语法。例如,使用 AMFPHP 并使用内置的 Flex 远程处理类,我可能会使用 'service.myCoolMethod.call("hello")' 和 weborb 'service.myCoolMethod("hello")'...所以我猜你会节省一点打字。
              【解决方案10】:

              PHP 有一个相当不错的serialize() 函数,所以对于我最近做的一个项目(游戏的高分),我使用了Sephiroth 的Serializer。它使 Flash 方面的序列化几乎与 PHP 中的序列化一样容易。序列化器还处理 AMF 等数据类型(与 json/xml 不同)。

              缺点 - 它不如 AMF 紧凑,但这不是 gzip 压缩无法处理的。

              【讨论】:

                【解决方案11】:

                AMF 具有相当的情境优势。如果您要传输大型复杂对象,请务必使用 AMF。但人们对 AMF 在传输小物体时所带来的开销知之甚少。如果您只传输具有 3 个属性的对象,则使用 AMF 可以将负载大小增加三倍。

                另一方面,我是 RESTful 架构的大力倡导者。由于 JSON 和 AMF 都只是表示形式,因此您可以构建一个接受两者的 REST 服务,并在运行时与您的客户端协商实际的表示形式。

                【讨论】:

                • AMFPHP 实际上有一个 JSON 接口以及 AMF。这就是我们正在使用的(虽然是旧版本的 AMFPHP,不知道新版本有什么用)
                【解决方案12】:

                “如果您想进行快速高效的通信,我强烈建议您坚持使用 AMF 协议”

                如果您想要快速、高效和通用的通信,请使用 json。然后,您的 Web 服务将可用于 flash、ajax 或常规 http 请求。

                【讨论】:

                • A) 这应该是对约翰回答的评论。
                • B) AMF 被序列化为二进制而不是 ASCII,因此它会更快更高效。 AMF 允许您自动在后端和前端之间来回传递强类型对象。我希望看到 JSON 这样做
                • 事实是 JSON 和 AMF 之间的性能差异可以忽略不计。我没有声称 json 更快,只是快。任何 php 对象都可以用 JSON 表示。 PHP 是动态类型的。解释一下“强类型对象”是什么意思。
                • 我不是在争论或支持约翰的回答,所以评论不合适。我要补充一点,json 提供了 AMF 所没有的东西,这在某些情况下可能是可取的。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-09-02
                • 2011-06-04
                • 2010-09-09
                • 1970-01-01
                • 2017-05-10
                相关资源
                最近更新 更多