SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx)

2023-11-27

我跟着401-ActionController-LiveRailscast 和这个博客文章 about Server-Sent-Events在我的 Rails 应用程序中设置类似的东西。当我仅使用时打开与服务器的连接时,它工作得很好puma但与puma + nginx,连接在发送第一个数据块后关闭。

我也尝试遵循这些问题中提供的解决方案,但它们对我不起作用:

  • ActionController::Live Streaming 在发送第一个块后终止
  • EventSource / 服务器通过 Nginx 发送事件

这就是我得到的:

Curl response

This is 我如何设置我的服务器这是我目前的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;
}

我将分享有效的配置。

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;
    }
}

控制器

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

curl

$ 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!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx) 的相关文章

随机推荐

  • C++ 中的扩展方法

    我正在寻找 C 中扩展方法的实现 并发现了这个 comp std c 讨论其中提到polymorphic map可以用于将方法与类相关联 但是 提供的链接似乎已失效 有谁知道这个答案指的是什么 或者是否有另一种方法以与扩展方法类似的方式扩展
  • 乔恩·斯基特 (Jon Skeet) 的 Singleton 澄清

    public sealed class Singleton Singleton public static Singleton Instance get return Nested instance class Nested Explici
  • 等效的隐式运算符:为什么它们是合法的?

    Update 请参阅下面我对 C 规范的一部分的剖析 我想我一定错过了一些东西 因为me看起来我在这个问题中描述的行为实际上违反了规范 更新2 好吧 经过进一步思考 并根据一些评论 我想我现在明白发生了什么 规范中的 源类型 一词指的是正在
  • 迭代器上的 Scala 映射不会产生副作用

    为什么会这样 scala gt List 1 2 3 4 iterator map x Int gt println x 不打印出来 1 2 3 4 while List 1 2 3 4 map x Int gt println x Lis
  • 如何将系统麦克风音频流传输到连接设备麦克风音频流

    I am trying to attach USB device used for tele calling which have pnp sound controller for mic and speaker Now i have tw
  • Spring Boot with Security OAuth2 - 如何通过 Web 登录表单使用资源服务器?

    I have 春季启动 1 2 1 RELEASE 服务的应用程序OAuth2 2 0 6 RELEASE 授权和资源服务器位于一个应用程序实例中 它使用自定义UserDetailsService实现利用MongoTemplate在 Mon
  • Pandas:列的指数平滑函数

    我有以下包含交易数据的 DataFrame df pd DataFrame Trader Carl Mark Carl Joe Mark Carl Max Max split Quantity 5 2 5 10 1 5 2 1 Date D
  • Javascript 和反斜杠替换

    这是我的字符串 var str This is my string 这是我的代码 var replaced str replace 我无法让我的输出为 This is my string 我已经尝试了我能想到的正则表达式和替换值的所有组合
  • 在meteor.js 中处理发布数据的简单方法?

    我需要在我的meteor js 应用程序中处理一些POST 数据 有没有一种简单的方法可以做到这一点 非常基本 如果它是一个 PHP 应用程序 我只需要 POST 变量 流星路由器 https github com tmeasday met
  • 如何确定 Apache 运行时的用户和组?

    在 DreamHost 共享主机上 我正在设置 htpasswd 但 Apache 无权读取该文件 我如何授予它权限 我想更改所有者或组 htpasswd文件而不是授予它不安全的权限 我认为我无权访问httpd conf文件 所以我不能使用
  • 将 ResourceProcessor 迁移到 HATEOAS 1.0.0 M1

    在我当前的 Spring HATEOAS 0 25 1 RELEASE 项目中 我大量使用资源处理器接口 Bean public ResourceProcessor
  • 使用 chunksize 迭代获取推断的数据帧类型

    如何使用 pd read csv 迭代地对文件进行分块并 保留数据类型和其他元信息 就像我阅读了整个内容一样 一次数据集 我需要读取太大而无法装入内存的数据集 我想使用 pd read csv 导入文件 然后立即将块附加到 HDFStore
  • JavaFX:设置文本控件的背景颜色

    我正在使用 TextFlow 和一些文本项来显示样式文本 但我找不到一种方法来设置简单的背景颜色Text items 我可以设置填充颜色和字体 但它没有设置其背景颜色的 java 方法或 css 属性 基于此solution 这是一种为所有
  • 如何在flutter中显示交付更新的进度条

    i wanna add a progress bar in my app but i dont know how to do this thing i just a beginer for flutter and wanna learn h
  • Nodejs中的AES 256 GCM加密解密

    我正在nodejs中实现一组基本的加密 解密函数 并且在解密部分不断收到以下错误 Error Unsupported state or unable to authenticate data 到目前为止 这是我的代码 import cryp
  • 让 CMake 在 Windows 上找到 flex

    我正在尝试在项目中使用 flex 并且我正在尝试使用 CMake 将 flex 与我的项目链接起来 我在网上找到了我正在使用的 FindFLEX cmake 你可以找到它here 默认情况下 这应该在 CMake 中 但我认为不是 我的目录
  • 导入字符串值中包含逗号的 CSV

    我正在尝试将一个简单的 CSV 导入 Postgres 8 4 数据库 这是一个表 CREATE TABLE public sample a VARCHAR b VARCHAR WITHOUT OIDS 以下是 CSV 文件示例 foo b
  • 支持 JSON 数组的 Hive JSON SerDe

    我尝试过 Amazon 为 EMR 实例提供的 JSON SerDe 如果您需要将 JSON 字典字段寻址 映射到列 它会非常有效 但是我无法弄清楚如何对 JSON 数组执行相同的操作 例如 如果有一个 JSON 数组如下 23123 32
  • Symfony2 和 Doctrine:如何获取同一个 id 的两个不同对象?

    我有这样的场景 对象 A 对其他对象 B C D 有一些引用 对象 B 对其他对象 A F G 有一些引用 对象 C 对其他对象 A 有一些引用 等等 在我的代码中 出于临时原因 我需要制作一个对象 比如A 的 副本 不 我不能使用不同的结
  • SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx)

    我跟着401 ActionController LiveRailscast 和这个博客文章 about Server Sent Events在我的 Rails 应用程序中设置类似的东西 当我仅使用时打开与服务器的连接时 它工作得很好puma