在Web应用程序中使用Rethinkdb的更改源

时间:2015-08-05 22:26:50

标签: ruby-on-rails rethinkdb

如何在网络应用中使用Rethinkdb的更改Feed,请参阅http://www.rethinkdb.com/docs/changefeeds/ruby/?我目前使用Ruby on Rails。我试过谷歌搜索'rethinkdb'更改提要“rails”和'rethinkdb'更改提要“websocket”

我想在网页上显示更新延迟的RethinkDB表更新。

2 个答案:

答案 0 :(得分:3)

RethinkDB旨在从服务器(来自Rails)而不是来自客户端使用。理解这一点非常重要!如果您有数据监听器(更换),则软管更改将路由到您的Rails应用程序。

如果要添加到前端(来自浏览器)查询RethinkDB,您可能会对这两个项目感兴趣:

https://github.com/mikemintz/rethinkdb-websocket-client

https://github.com/mikemintz/rethinkdb-websocket-server

将这些更改路由到您的应用程序后,您可以根据需要使用它们。如果您要做的是将这些更改路由到前端以向用户显示这些更改,您只需通过Web套接字发送它们即可。 Faye是一个非常好的图书馆。

这就是这样的样子。在你的ruby代码中,你会添加如下内容:

 # Add Faye
  App = Faye::RackAdapter.new MessageApp, mount: "/faye"

  # Changefeed listener
  r.table("messages").changes.em_run(Conn) do |err, change|
    App.get_client.publish('/message/new', change["new_val"])
  end

基本上,只要messages表发生更改,就通过Web套接字发送新值。您可以在此处查看完整示例(带前端代码):

https://github.com/thejsj/ruby-and-rethinkdb/

这是Ruby文件:

https://github.com/thejsj/ruby-and-rethinkdb/blob/master/server/main.rb

答案 1 :(得分:2)

RethinkDB似乎不支持复杂的客户端身份验证(auth令牌在所有客户端之间共享),因此您无法通过Javascript执行客户端。

但您可以创建一个管道:在您的服务器上运行websocket,它将从RethinkDB获取记录并将其传递给客户端。使用em-websocket,它看起来像这样:

require 'em-websocket'
require 'rethinkdb'
include RethinkDB::Shortcuts

EventMachine.run do
  @clients = []
  @cursor = r.table("authors").changes.run

  EM::WebSocket.start(:host => '0.0.0.0', :port => '3001') do |ws|
    ws.onopen do |handshake|
      @clients << ws
    end

    ws.onclose do
      @clients.delete ws
    end

    @cursor.each do |document|
      @clients.each{|ws| ws.send document}
    end
  end
end