2013-03-02 27 views
3

我有一个数据流通过http命中来到我身边。我想实时更新数据。我已经开始将HTTP点击数据推送到redis pubsub。现在我想展示给用户。在ruby中使用redis pubsub实时显示?

我想在redis通道上获得一些数据后立即更新用户的屏幕。我想使用红宝石,因为这是我熟悉的语言。

+0

为什么不使用第三方工具,如pubnub或推? – 2013-03-02 23:14:35

+1

为什么我不能用我自己的?我不想让第三方用于内部应用程序。 – piyush 2013-03-02 23:34:50

回答

7

我会在客户端使用Sinatra的“流”功能与EventSource相结合。虽然,IE浏览器出。

下面是https://github.com/redis/redis-rb/blob/master/examples/pubsub.rb拉(另一个选择是https://github.com/pietern/hiredis-rb)一些主要功能服务器端代码:

get '/the_stream', provides: 'text/event-stream' do 
    stream :keep_open do |out| 
    redis = Redis.new 
    redis.subscribe(:channel1, :channel2) do |on| 
     on.message do |channel, msg| 
     out << "data: #{msg}\n\n" # This is an EventSource message 
     end 
    end 
    end 
end 

客户端。大多数现代浏览器都支持EventSource的,除了IE:

var stream = new EventSource('/the_stream'); 
stream.onmessage = function(e) { 
    alert("I just got this from the server: " + e.data); 
} 
1

由于我知道你可以通过Faye检查您这样做link

有几个方法,如果你愿意,你可以尝试

  1. 我记得自己建立一个使用瘦和sinatra长轮询服务器来实现这样的事情现在如果你希望你可以做同样的事情

  2. 我知道的很少像thisthis Flash客户端,您可以使用直接连接到Redis的

  3. 有EventMachine的WebSocket的实现u可以使用与HTML 5和Flash非HTML 5的浏览器

  4. 它挂
  5. WebSocket的机架

另一种方法,你可以尝试只是一个建议,因为大部分的arent Ruby编写的

  1. 剑圣(我不认为它基于Redis的发布 - 订阅的事情也曾经有早期不知道现在的红宝石东西)

  2. Socket.io

  3. Webd.is

  4. NULLMQ不是Redis的pub sub,但这是在javascript中的零MQ实现

有fe W其它方法,您可以找到如果妳谷歌了:)

希望这有助于