什么是使用Rails和Flex的首选方式?

时间:2012-08-27 16:55:22

标签: ruby-on-rails ruby flex push

我想创建一个类似于聊天应用程序(实时应用程序)的服务。

从我的研究中可以看出,BlazeDS是首选方式,但它涉及Java和Java EE。此外,最新的Ruby结果似乎是从2009年到2010年,所以它们可能已经过时了。

是否有积极维护的Ruby / Rails解决方案用于将推送通知与Flex集成?

4 个答案:

答案 0 :(得分:7)

目前情况

使用Flex吗? HTML5 websockets是一种新兴但不断发展的技术,现在已有实施。 Flex的日子已经屈指可数了。然而,websockets在IE中还没有本机支持。

  • em-websocket是一个基于eventmachine的ruby websocket服务器。服务Pusher基于它。
  • Faye是一个websocket服务器和客户端。 (Railscast
  • 还有其他Ruby实现,例如CrampSocky
  • 如果您对其他技术(如Node)中的服务器持开放态度,可以使用许多Ruby或Javascript客户端。

更新:我可能会提到我一段时间以前与Flex做过类似的事情,并获得了Flex on Rails的副本。该书的server push example使用了Juggernaut,遗憾的是stopped further development。作者指出Server-Sent Events(SSE)使Juggernaut变得多余。所有主要浏览器except IE都原生支持它们,类似于situation with websockets

有使用javascript将polyfills带到浏览器的填充程序(“these missing capabilities”)。例如,jQuery Graceful WebSocket是一个实现websocket客户端的jQuery插件,但是回退到AJAX轮询,因此功能仍然可以在IE中运行,只是不会那么即时。因为它检测到websocket支持,所以只要浏览器支持websockets,就会使用它们。

缩小差距

我们似乎陷入了一个过渡时期,我们处于Flash的日落时代,但尚未获得对其替代技术的广泛支持。有一个图书馆可以缩小差距:Socket.IO。该库在运行时选择功能最强大的技术传输。它将使用Flash(如果存在),但也可以使用websockets,AJAX长轮询,AJAX多部分流,必要时使用“永久iframe”。这为浏览器提供了广泛的支持:

  • IE 5.5 +
  • Safari 3 +
  • Google Chrome 4 +
  • Firefox 3 +
  • Opera 10.61 +
  • iPhone Safari
  • iPad Safari
  • Android Webkit
  • WebOS Webkit

这实际上比单独的Flash / Flex或WebSocket更广泛的兼容性。 Socket.IO是用Javascript实现的服务器和客户端,所以你需要一个服务器端的Javascript运行时,比如Node。

可能的解决方案

虽然似乎没有很多当前对Rails 3的引用 - > Flex解​​决方案(如您所见),看来Ruby / Rails和Socket.IO的组合有一些牵引力。

如果你想使用Socket.IO将聊天添加到Rails应用程序,Liam Kaufman有一篇很好的参考博客文章,他使用Socket.IO在Rails 3中创建了一个聊天应用程序:http://liamkaufman.com/blog/2012/02/25/adding_real-time_to_rails_with_socket.IO_nodejs_and_backbonejs_with_demo/

还有一个socket.io gem,它增加了对上面提到的Cramp服务器的支持。

对于其他正在使用Rails 3和Socket.IO组合的人来说,似乎还有其他stackoverflow问题。

TL; DR摘要

虽然没有太多迹象表明人们正在从Rails直接进行Flex,但还有其他最有希望的解决方案是Rails和Socket.IO的组合。

答案 1 :(得分:3)

如果您希望在Ruby世界中生活,可以使用常规WebSockets与Flex应用程序进行通信。它不会很漂亮,但它可以工作,你可以避免Java后端。这比告诉BlazeDS扔掉周围的结构要原始得多,但它应该是可行的。

在Flex客户端,有一个由Kaazing编写的库,它与WebSocket服务器捆绑在一起。下载其中一个WebSocket服务器,在client-libs文件夹中,应该有一个swc(带文档),可以用来与em-websocket(或者实际上,任何websocket技术)交谈。

现在,所有这些,你将不会有BlazeDS或GraniteDS的可扩展性,但它应该适用于较小的实现和演示。

答案 2 :(得分:0)

您可以使用https://github.com/rubyamf/rubyamfhttps://github.com/victorcoder/rubyamf_plugin

但是你会遇到实时消息传递问题,因为rubyamf和rubyamf_plugin不支持RTMP。

答案 3 :(得分:0)

您可以使用RestfulX gem& Flex框架。这就是我用于Rails / Flex的内容。