3

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

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

4

7 回答 7

3

您可以使用WebORBRubyAMF从 Rails 在 AMF 中进行响应,每种方法都有所不同,因此取决于您的需求。RubyAMF 在Flexible Rails电子书的最后几章中进行了讨论,这是一个很好的将 Rails 与 Flex 结合使用的资源。

于 2008-09-16T09:13:04.530 回答
2

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

值得一提的是,我们也在 flex 端使用 PureMVC 框架,将响应保存在客户端模型中。

于 2008-09-17T09:38:09.843 回答
1

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

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

您会惊讶于通过 REST 将 Flex 直接连接到 Rails 的效果如何,而且您不必依赖第三方。我建议你试试看。

希望这可以帮助

于 2008-09-16T15:28:04.703 回答
1

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

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

于 2008-09-30T11:42:33.190 回答
1

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

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

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

返回 JSON 的 REST 非常简单,如果我必须构建另一个(我希望不会),我将继续使用它。

YMMV。

于 2009-11-11T12:56:27.530 回答
0

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

于 2008-09-16T09:12:22.393 回答
0

你可以使用 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
  • 凯文
于 2009-11-10T16:18:22.937 回答