【发布时间】:2014-05-27 05:58:40
【问题描述】:
我们有一个仅执行 HTTP API 的 Rails 应用程序。在客户端,目前使用的是 Ember.js。 Ember 并没有给我们留下太多印象,并且非常喜欢 Meteor.js 采用的方法。因此,我们希望将客户端与 Meteor.js 进行交换,并通过使用数据分发协议 (DDP) 的 websocket 与 Rails 服务器进行通信,这样我们就可以继续使用 Rails 中的模型、邮件程序和控制器。实现 DDP 的服务器端应该很容易。
但是,我们不确定如何让 Rails 与 websocket 对话。我们找到了 Reel,它似乎可以很容易地在独立环境中接受 websocket 请求。 Reel 看起来很棒,因为无论如何我们都希望在赛璐珞堆栈之上实现 DDP。但是在 Rails 环境中运行 Reel 呢?我们需要“rails runner”吗?我们希望继续使用现有的控制器来分派传入的请求(例如,添加/更改/删除资源)。如果没有通过 Rack 的请求,这是否可能?
感谢任何输入。
【问题讨论】:
-
我不知道 Rails 的东西,但你不能使用 Meteor。 Meteor 是一个全栈框架;它同时处理客户端和服务器端。
-
理论上你可以教 Rails 说 DDP,但更大的挑战是实现与数据库的实时同步、延迟补偿等。如果你只是想使用 Meteor 的前端部分没有大部分功能但仍保留实时页面更新(例如数据绑定),请查看 Blaze - Meteor 的实时页面渲染引擎。
-
感谢您的回答。实时同步应该很容易。只需将 after_create、after_update 和 after_destroy 回调添加到各自的模型,并让回调通过 DDP 将更新发送到订阅的客户端。我只是不知道如何在 Rails 的上下文中运行 Celluloid::IO 服务器。最佳做法?
标签: ruby-on-rails websocket meteor celluloid ddp