我将Rails开发视为Flex应用程序的后端,并试图弄清楚Rails应用程序和Flash Player之间的通信层。我发现的所有东西都建议使用SOAP web服务进行通信。
然而,Flash支持AMF,它既好又快(而且是本地的)。有没有任何方法可以从Rails应用程序通过AMF进行通信,同时支持AMF的所有“好”功能(自动类型转换、数据推送等)。
我将Rails开发视为Flex应用程序的后端,并试图弄清楚Rails应用程序和Flash Player之间的通信层。我发现的所有东西都建议使用SOAP web服务进行通信。
然而,Flash支持AMF,它既好又快(而且是本地的)。有没有任何方法可以从Rails应用程序通过AMF进行通信,同时支持AMF的所有“好”功能(自动类型转换、数据推送等)。
有WebORB或RubyAMF您可以使用它在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