我将 Rails 开发视为 Flex 应用程序的后端,并试图找出 Rails 应用程序和 Flash Player 之间的通信层。我发现的所有内容都表明使用 SOAP Web 服务进行通信。

然而,Flash 支持 AMF,它很好且快速(并且是本机的)。有没有什么方法可以从 Rails 应用程序通过 AMF 进行通信,同时支持 AMF 的所有“好”功能(自动类型转换、数据推送等)。

有帮助吗?

解决方案

网络ORB 或者 红宝石AMF 您可以使用它在 Rails 的 AMF 中进行响应,每种方法的方法都略有不同,因此这取决于您的需求。RubyAMF 在本书的最后几章中进行了讨论 灵活的导轨 电子书是关于将 Rails 与 Flex 结合使用的很好的资源。

其他提示

我正在编写一个 Rails/Flex 应用程序,我们正在转向在 REST 框架内使用 JSON 通信。来自 Flex 端处理 JSON 响应的简单 HTTP 请求似乎是解耦客户端和服务器的最佳方法。XML 同样简单。

无论如何,我们也在 Flex 端使用 PureMVC 框架,将响应保留在客户端模型中。

您不会使用 SOAP Web 服务,而是使用“本机”REST Web 服务,这些服务是 Rails 中本机的。上面 DEFusion 引用的书实际上是关于这一点的:如何使用 FLEX 客户端作为使用 REST(即 XML)的 Rails 应用程序的前端。

AMF 协议主要由 Adob​​e 作为二进制协议构建,以允许 FLEX 前端与 CodeFusion 以及 Java 服务器应用程序进行通信。它不是免费的,除了使用 Adob​​e 的 BlazeDS 之外,您实际上不会获得太多支持。当然,您必须选择一个能够使用 AMF 协议与 BlazeDS 通信的插件(再次参见 DEfusion 的帖子)并依赖它。

您会对通过 REST 将 Flex 直接连接到 Rails 的效果感到惊讶,而且您不必依赖第三方。我建议你尝试一下。

希望这可以帮助

如果您想要与可以响应/生成 AMF 的控制器进行 MVC 风格的交互,请使用 RubyAMF。

将 WebOrb 用于任何其他样式,包括直接访问模型对象。

我已经使用所有三种方法(WebOrb、RubyAMF、REST)构建了应用程序...

WebOrb for Rails 几乎已经死了,它已经有一段时间没有更新了。也就是说,我能够创建一些 Flex/Ruby 魔法,使 Flex 对 Rails 模型对象的访问变得透明......如果你有兴趣我会把它挖出来并发给你。

RubyAMF 很好,但不如 WebOrb 灵活(哈!)。

REST 返回 JSON 很容易,如果我必须构建另一个(我希望不是),我将继续使用它。

YMMV。

有一个名为 Rails 的插件 用于 Ruby on Rails 的 WebORB 它使用 AMF 进行远程处理。

您可以使用 WebORB 或 RubyAMF,或者只是简单的 XML - Rails 在 XML 方面非常聪明,但也有一些问题。

我们几乎完全使用 XML 在 Rails 应用程序和 Flex Web 应用程序之间进行通信。这很简单。

要从 Rails 应用程序检索数据,只需创建一个 result_type 为 e4x 的 HTTPService,然后调用您的 url。在你的 Rails 控制器中,执行如下操作:

def people
  render :xml => Person.all.to_xml
end

有时,Rails 会将标签添加到末尾。如果发生这种情况,请将控制器更改为:

def people
  render :xml => Person.all.to_xml.target!
end

如果您想将数据发送到 Rails 应用程序,也同样简单。

<mx:HTTPService id="theservice" url="http://localhost:3000/svc/add_person" method="POST">
 <mx:request>
  <person>
   <first>Firstname</first>
   <last>Lastname</last>
  </person>
 </request>
</HTTPService>

在你的控制器中:

def add_person
  p=Person.create(params[:person])
  render :xml => {:result => "Success"}.to_xml.target!
end
  • 凯文
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top