English 中文(简体)
Rails开发人员如何与Flex前端对话?
原标题:
  • 时间:2008-09-16 08:58:58
  •  标签:

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

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

最佳回答

WebORBRubyAMF您可以使用它在Rails的AMF中进行响应,每种方法都有点不同,所以这取决于您的需求。RubyAMF在Flexible Rails电子书,这是一本关于将Rails与Flex一起使用的好资源。

问题回答

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

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

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

AMF协议主要由Adobe构建,作为一种二进制协议,允许FLEX前端与CodeFusion对话,当然还有Java服务器应用程序。它不是免费的,除了使用Adobe的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是一个快照,如果我必须构建另一个JSON(我希望不是),我将继续使用它。

YMMV。

有一个名为RubyonRails的WebORB,它使用AMF进行远程处理。

您可以使用WebORB或RubyAMF,或者只使用普通的XML——Rails在XML方面非常聪明,这里和那里有一些问题。

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

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

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
  • Kevin




相关问题
热门标签