2013-03-02 25 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其它方法,您可以找到如果妳谷歌了:)

希望這有助於