She*_*yar 5 nginx server-sent-events puma ruby-on-rails-4
我按照401-ActionController-Live Railscast和这篇博客文章关于Server-Sent-Events在我的Rails应用程序中设置类似的内容.当我打开与服务器的连接时,只有使用puma但是puma + nginx,在发送第一个数据块后连接关闭时,它才能正常工作.
我也尝试过按照这些问题提供的解决方案,但它们对我不起作用:
这就是我得到的:

这是我如何设置我的服务器,这是我当前的nginx配置:
upstream puma {
server unix:///home/deploy/apps/outy/shared/tmp/sockets/outy-puma.sock;
keepalive 16;
}
server {
listen 80 default_server deferred;
root /home/deploy/apps/outy/current/public;
access_log /home/deploy/apps/outy/current/log/nginx.access.log;
error_log /home/deploy/apps/outy/current/log/nginx.error.log info;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_cache off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 10M;
keepalive_timeout 10;
}
Run Code Online (Sandbox Code Playgroud)
小智 4
我将分享有效的配置。
nginx
upstream app_server {
server unix:/var/tmp/sockets/puma.sock
fail_timeout=0;
}
server {
listen 80 default_server;
listen 443 ssl;
client_max_body_size 8m;
server_tokens off;
server_name localhost;
keepalive_timeout 5;
location / {
try_files @uri @app;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_pass http://app_server;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器
class StreamController < ActionController::Base
include ActionController::Live
def hello
response.headers["Content-Type"] = "text/event-stream" #; charset=utf-8"
10.times {
response.stream.write("data: Hello World!!\n\n")
sleep 1
}
rescue IOError
puts "Stream IO Error"
logger.info "Stream IO Error"
ensure
puts "Stream closed"
logger.info "Stream closed"
response.stream.close
end
end
Run Code Online (Sandbox Code Playgroud)
卷曲
$ curl -i -N http://localhost/stream/hello
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 29 Jul 2015 09:15:43 GMT
Content-Type: text/event-stream
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-cache
X-Request-Id: 41e80567-d792-4a48-9ec3-c661aa056081
X-Runtime: 0.062282
Vary: Origin
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
data: Hello World!!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |