1

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

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

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

4

4 回答 4

7

目前的情况

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

  • em-websocket是一个基于 eventmachine 的 ruby​​ websocket 服务器。服务Pusher就是基于它。
  • Faye是一个 websocket 服务器和客户端。(铁路广播
  • 还有其他 Ruby 实现,例如CrampSocky
  • 如果您对 Node 等其他技术中的服务器持开放态度,那么有许多 Ruby 或 Javascript 客户端已准备就绪。

更新:我可能会提到不久前我曾考虑用 Flex 做一些类似的事情,并得到了一份Flex on Rails的副本。本书的服务器推送示例使用了剑圣,不幸的是它已经停止了进一步的开发。作者指出,服务器发送事件(SSE) 使 Juggernaut 变得多余。除 IE 之外的所有主流浏览器都原生支持它们,类似于websockets 的情况

有一些垫片(“ polyfills ”)使用 javascript 将这些缺失的功能带到浏览器中。例如,jQuery Graceful WebSocket是一个 jQuery 插件,它实现了一个 websocket 客户端,但回退到 AJAX 轮询,因此该功能仍然可以在 IE 中工作,只是不会那么即时。因为它检测到 websocket 支持,所以只要浏览器支持 websocket,它们就会被使用。

弥合差距

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

  • IE 5.5+
  • 野生动物园 3+
  • 谷歌浏览器 4+
  • 火狐 3+
  • 歌剧 10.61+
  • 苹果浏览器
  • iPad Safari
  • 安卓网络套件
  • WebOS Webkit

这实际上比单独的 Flash/Flex 或 WebSockets 具有更广泛的兼容性。Socket.IO 是在服务器端和客户端的 Javascript 中实现的,因此您需要一个服务器端 Javascript 运行时,例如 Node.js。

可能的解决方案

虽然目前似乎没有很多对 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 的组合。

于 2012-08-30T22:47:48.500 回答
3

如果您想生活在 Ruby 世界中,您可以使用常规WebSockets与 Flex 应用程序通信。它不会很漂亮,但它会起作用,并且您可以避免使用 Java 后端。这比告诉 BlazeDS 扔结构更原始,但它应该是可行的。

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

现在,说了这么多,你几乎没有 BlazeDS 或 GraniteDS 的可扩展性,但它应该适用于较小的实现和演示。

于 2012-09-03T15:25:54.737 回答
0

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

但是你会遇到实时消息传递的问题,因为 ruby​​amf 和 ruby​​amf_plugin 不支持 RTMP。

于 2012-09-05T13:37:45.953 回答
0

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

于 2012-11-07T19:06:52.480 回答