我怎样才能实时检索更新的logging? (推送通知?)

我正在尝试在rails电子商务应用程序中创build一个ruby,在这个应用程序中,潜在客户将能够下订单,店主将能够实时接收订单。 最终订单将被logging到数据库中(目前SQLite),并且店主将打开一个浏览器窗口,新订单将在订单完成后立即显示。 (应用程序信息:我正在使用HOBO rails框架,并计划在Heroku中托pipe应用程序)

我现在正在考虑实现这个最好的技术,因为应用程序预计会有很多用户发送大量的命令:

1)每个浏览器窗口每隔X分钟刷新页面,连续轮询服务器以获取新logging(新订单)。 当然,这会给服务器带来沉重的负担。

2)如上所述,但用某种AJAX框架轮询服务器。

3)使用某种服务器推送技术,如“彗星”asynchronous消息。 发现Juggernaut,唯一的问题是它使用Flash和自定义端口,这可能是一个问题,因为我的应用程序应该可以在公司防火墙和NAT后面访问。

4)我也检查node.js框架,似乎是这种asynchronous消息传递的效率,虽然在Heroku中不支持。

哪种是实现这种function的最有效的方法? 还有没有想过的另一种方法?

感谢您的时间和帮助!

Node.js可能是一个不错的select – 速度很快,喜欢实时并有很好的彗星支持。 唯一的缺点是您正在向解决scheme中引入另一种技术。 在tho编程是非常有趣的,很多图书馆都受到了rails和sinatra的启发。

我知道,heroku已经运行了一段时间的node.jstesting版,人们正在使用它作为最近的nodeknockout比赛的一部分。 看到这个博客文章 。 如果这不是一个选项,你肯定可以在其他地方举办。 如果您在heroku上托pipe它,您可能可以代理请求。 否则,你可以愉快地从一个子域运行它,所以你可以共享cookie。

还签出socket.io 。 它根据浏览器的functionselect最佳的彗星方法做得很好。

要在节点和导轨之间共享数据,您可以共享cookie,然后将会话数据存储在两个应用程序都可以访问的数据库中。 更复杂的体系结构可能涉及使用Redis在它们之间发布消息。 或者你也许能够在http请求中传递你需要的所有东西。

在HTTP中,请求只能来自客户端。 因此,最好的select是你已经提到(轮询和HTTPstream)。

轮询更容易实施; 它会使用相当多的带宽。 这就是为什么你应该保持尽可能小的请求和响应,所以你一定要使用XHR(Ajax)。

你的另一个select是HTTPstream(Comet); 这将需要更多的工作,但你可能会觉得这是值得的。 你可以给Rails上的Realtime一个镜头。 有关如何减less带宽使用的更多信息和技巧,请参阅:

http://ajaxpatterns.org/Periodic_Refresh
http://ajaxpatterns.org/HTTP_Streaming

实际上,如果你让店主运行Chrome浏览器(其他浏览器会很快跟进),你可以使用WebSockets(只是为了通知店主的通知),这样可以让你打开一个不断的连接,并且你可以不用浏览器请求什么。

有几个node.js的websocket库,但我相信你可以使用普通的tcp连接轻松地完成。