4

我有通过 http 命中传给我的数据流。我想实时更新数据。我已经开始将 HTTP 命中数据推送到 redis pubsub。现在我想向用户展示它。

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

4

2 回答 2

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);
}
于 2013-03-03T01:20:19.720 回答
1

据我所知,您可以通过Faye查看此链接来执行此操作

有几种方法如果您愿意,可以尝试

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

  2. 我知道很少有这样的和这个可以用来直接连接到 redis 的 flash 客户端

  3. 您可以使用 EventMachine Websocket 实现并将其与非 HTML 5 浏览器的 HTML 5 和 Flash 挂钩

  4. Websocket-Rack

其他方法你可以尝试一个建议,因为它们中的大多数都不是用 ruby​​ 编写的

  1. Juggernaut (我不认为它基于 Redis Pub-sub Thing 也曾经用于 ruby​​ 的东西,现在还不确定)

  2. 套接字.io

  3. Webd.is

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

如果你用谷歌搜索,你能找到的其他方法很少:)

希望这有帮助

于 2013-03-03T05:23:31.713 回答