Rails Live Streaming不会直播

时间:2014-03-27 22:24:05

标签: ruby-on-rails ruby-on-rails-4 streaming live

我想使用rails 4引入的实时流功能。在我的应用程序中它没有用,所以我只创建了一个非常简单的例子。但这也不会流式传输内容。它打开连接,等待所有10次运行都通过,然后流式传输竞争。

以下是示例代码。

  • 首先,我使用rails 4.0.2
  • 创建了一个新的rails应用程序
  • 其次我添加了宝石'美洲狮',以便支持实时流媒体

控制器看起来像这样:

class MyController < ApplicationController
include ActionController::Live

def index
    response.headers['Content-Type'] = 'text/event-stream'
        10.times {
          response.stream.write "This is a test Messagen"
          sleep 1
        }
        response.stream.close
    end
end

我用curl进行测试:

curl -i http://localhost:3000/my
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Content-Type: text/event-stream
Cache-Control: no-cache
Set-Cookie: request_method=GET; path=/
X-Request-Id: 7bdf30a2-158b-40ce-81c8-651914c7b5df
X-Runtime: 0.048783
Transfer-Encoding: chunked

This is a test MessagenThis is a test MessagenThis is a test MessagenThis is a test 
MessagenThis is a test MessagenThis is a test MessagenThis is a test MessagenThis is a test 
MessagenThis is a test MessagenThis is a test Messagen

但它会持续10秒,直到消息全部写在一起(不是每秒一次)。

我在互联网上的很多页面上找到了这个代码示例 - 但不知道出了什么问题。

任何想法?

1 个答案:

答案 0 :(得分:0)

首先,我认为你需要一个换行符才能让它与curl一起流式传输。

response.stream.write "This is a test Messagen\n"

curl localhost:3000

This is a test Messagen
This is a test Messagen
This is a test Messagen
This is a test Messagen
This is a test Messagen

换行符(\ n)似乎允许流式传输以睡眠方式递增,而不是等待整个时间段,然后立即吐出结果。

要实际渲染到视图(使用EventSource),您需要设置

config.cache_classes = true
config.eager_load = true

这将有效&#34;确定&#34;对于一个hello world,但是对于一些可靠且可扩展的东西,当你最终从数据库中取出时,我会使用Redis而不是循环。