使用异步 sinatra 流式传输多个主体

2023-12-06

我想从 javascript 启动一个长轮询请求,这很好,我希望我的 ruby​​ prog 将多个正文部分流式传输到 javascript。为什么以下(伪)代码不起作用?

require 'rubygems'
require 'sinatra/async'
require 'eventmachine'
require 'thin'
require 'json'

    class Test < Sinatra:Base
      register Sinatra::Async

      aget '/process' do
        for c in 1..10
          body {
            { :data => [ "this is part #{c}" ] }.to_json
          end
        end
      end

      run!
    end

也许我误解了长轮询和异步应该做什么,但我的期望是我将多个主体发送回客户端?我需要使用 eventmachine 还是其他东西?

thanks


require 'rubygems'
require 'sinatra/async'
require 'thin'
require 'json'

class Test < Sinatra::Base
  register Sinatra::Async

  class JSONStream
    include EventMachine::Deferrable

    def stream(object)
      @block.call object.to_json + "\n"
    end

    def each(&block)
      @block = block
    end
  end

  aget '/process' do
    puts 'ok'
    out = JSONStream.new
    body out
    EM.next_tick do
      c = 0
      timer = EM.add_periodic_timer(0.3) do
        c += 1
        out.stream :data => ["this is part #{c}"]
        if c == 100
          timer.cancel
          out.succeed
        end
      end
    end
  end

  run!
end

也可以看看:http://confreaks.net/videos/564-scotlandruby2011-real-time-rack

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

使用异步 sinatra 流式传输多个主体 的相关文章

  • 如何静默启动Sinatra + Thin?

    我有一个 Sinatra Base webservice 我想从命令行 Ruby 程序启动它 所以我有这个 command line program file require mymodule server puts Running on
  • 具有异步操作的面向铁路的编程

    以前问过类似的问题 但不知何故我没有找到出路 再次尝试另一个例子 作为起点的代码 稍作修改 可在https ideone com zkQcIU https ideone com zkQcIU 它有一些识别问题Microsoft FSharp
  • CompletableFuture:whenCompleteAsync() 不允许我重新抛出异常

    我是 CompletableFuture 世界的新手 我正在尝试做一些负面测试 以允许我故意抛出异常的方式 该异常将决定通过 失败 这是代码片段 protected CompletableFuture
  • 学习树顶

    我正在尝试自学 Ruby 的 Treetop 语法生成器 我发现 对于 最好的 文档来说 不仅文档非常稀疏 而且它的工作方式似乎并不像我希望的那样直观 从高层次上来说 我真的很喜欢比现场文档或视频更好的教程 如果有的话 在较低的层面上 这是
  • YAML 每个缩进有多少个空格?

    如果我在每个缩进级别使用一个空格 两个或四个空格 有什么区别吗 YAML 每个结构类型的空间数量有什么具体规则吗 例如4嵌套空间maps 1每空间项目清单 etc 我正在为 elastic beanstalk ebextensions 编写
  • Ruby on Rails:如何使用 JSONPath 访问(并保存到数据库)JSON 数组中的嵌套对象/属性?

    我正在尝试将 JSON 对象数组中的数据播种到我的数据库中 我有两个单独的数据库表 属性和单位 一个属性有许多单位 我已经能够通过 API 请求 JSON 数据 然后将其播种到数据库 成功地对属性信息 属性模型 执行此操作 但是 Valua
  • 不使用 RVM 时的 Cron +

    我使用的是RVM环境 RUby 版本 2 1 2 导轨 4 1 1 schedule rb every 1 minute do runner note send mail end I used whenever update crontab
  • 关于空 own_to 关联的最佳实践

    想象一下以下情况 我有一个dog模型和一个house模型 一只狗可以属于一个房子 一个房子可以有很多只狗 所以 Class Dog lt ActiveRecord Base belongs to house end Class House
  • Ruby:邮件 gem 在邮件中的 60 个字符后添加 \r\n

    我要移植Actionmailer x509 https github com petRUShka actionmailer x509到 Rails 3 为了做到这一点 我尝试从带有签名电子邮件的大字符串创建 Mail 对象 您可以在这一行看
  • 如何在 Ruby on Rails 中访问控制器中的隐藏字段

    问题 如何访问隐藏字段值post id从文件view comments comment html erb并用在controllers dashboards controller rb 有 2 个控制器 仪表板和评论 并使用gem act a
  • RVM 无法通过 SSH 工作(作为一项功能)

    我刚刚在 Debian 6 服务器上安装了 RVM 一开始没有任何问题 但是 在一切设置完成后 我无法在终端中运行 RVM 我打字时收到的消息rvm use is RVM is not a function selecting rubies
  • 为什么我必须将 Async 包装到另一个异步工作流程中并让!它?

    我试图了解 F 中的异步工作流程 但我发现有一部分我真的不明白 下面的代码工作正常 let asynWorkflow async let result Stream TryOpenAsync partition gt Async Await
  • Google Drive API 中收到错误 403 - 未经身份验证的使用已超出每日限制。继续使用需要注册

    我正在使用 ruby 的 Google Drive API 并且尝试将文件插入到用户驱动器中 我可以成功插入文件 但是当我尝试获取文件自链接时 这是返回的 URLhttps www googleapis com drive v2 files
  • 无法使用 gem 添加源

    我正在尝试添加http rubygems org http rubygems org 在我的来源中 因为我无法使用 gem install NAME 此错误 无法在任何存储库中找到有效的 gem dashing gt 0 所以 我执行了这个
  • ActionMailer 响应“501 5.5.4 无效参数”

    我正在 Ruby 2 0 0 上使用 Rails 4 开发一个应用程序 在 Devise 中注册后 应用程序会发送一封电子邮件 这是发送电子邮件的代码 应用程序 模型 sponsor rb after create send email t
  • 我应该在 Heroku 上部署 Ruby on Rails 应用程序吗?

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于我自己的一些情况 我今年 24 岁 去年从北卡罗来纳州立大学毕业 获得了分析硕士学位 统计 数学之类的 我没有很强的编程背景 这对我的问题非
  • 是否可以下载 Ruby gem 而不自动安装它?

    当我使用下载东西时gem我希望能够只下载 gem 然后选择是否要安装它 我问这个问题是因为我想在多台计算机上安装特定的 gem 而不是在每台计算机上从互联网安装 宝石获取 所以 像 gem fetch gosu 这将离开gosu 0 7 1
  • 为什么需要 EndExecuteNonQuery()?

    文档here http msdn microsoft com en us library ca56w9se aspx指出 开发人员必须致电 EndExecuteNonQuery 方法完成 操作 我无法找到一个充分的理由来解释为什么会这样 或
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • 使用 Squeal 时可以有条件地在 where 块中添加子句吗?

    首先 我使用 Rails v3 2 9 和 Squeel 1 0 13 这就是我想要做的 我想使用三项身份信息中的任何一项来搜索客户 姓名 出生日期 dob 和社会保险号码 sin 结果集必须包括具有任何标识符 条件的 OR 的任何记录 我

随机推荐

  • Spring JPA如何确保数据写入持久存储

    我试图扩展这个例子 https github com scratches jpa method security sample通过在控制器中添加一个方法来 注册 其中新用户会动态添加到存储库中 默认的现有用户集添加到 import sql
  • Java 的 HTML/XML 解析器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 哪些 HTML 解析器具有
  • 如何使用OpenCv叠加图像?

    如何叠加两个图像 本质上 我有一个没有 Alpha 通道的背景 以及一张或多张具有 Alpha 通道的图像 需要彼此叠加 我尝试了以下代码 但叠加结果很糟糕 create our out image Mat merged info widt
  • 南特邮件问题

    任何人都可以建议我如何配置通过 nant 发送邮件 我什至浏览了该链接 但没有成功 感谢致敬 麦迪 您将使用类似这样的东西
  • 类型“...”没有定义构造函数

    我注意到编译器错误类型 没有定义构造函数当我错误地尝试实例化特定类时生成 这让我想知道我将如何编写自己的类 当有人试图实例化它时 该类会沉淀此消息 那么下面的代码 我需要做什么MyClass namespace MyNamespace cl
  • 如何使用 JS 更改 @keyframes? [复制]

    这个问题在这里已经有答案了 我在用着 progressBar background color 247BA0 width 150px padding 10px border radius 5px animation progressBar
  • Oracle 中的重音和大小写不敏感 COLLATE 等效项

    在 Microsoft SQL Server 中 如果我想在区分大小写的数据库中不区分大小写地搜索 我可以运行以下 SQL SELECT FROM MyTable WHERE MyField BobDillon COLLATE Latin1
  • 空手道 - 无法循环运行动态场景大纲

    这是我的功能文件 它只加载 json 文件并想要迭代相同的文件 Background def kittens read json test json Scenario Outline cat name
  • 类型错误:传递给 Series.__format__ 的格式字符串不受支持

    我试图在我的仪表卡上添加千位分隔符 但我所有的努力都是徒劳的 发现这个解决方案更准确 但它给了我一个错误 类型错误 传递给系列的格式字符串不受支持 format app callback Output sls children Output
  • 在 RDLC 中将表包装为多列

    需要为 RDLC 报告生成动态列表 名称 页码 但我需要将它包装成这样的三列 有什么解决办法吗 我会建立一个这样的矩阵 行组基于表达式 Ceiling RowNumber Nothing 3 列组基于表达式 RowNumber Nothin
  • 如何在 Visual Studio Code 中打开交互式 shell/REPL?

    我正在使用 Visual Studio Code 并且我想要一个可以在其中运行单个 Python 指令的 REPL 我发现了一些一年前的微软文档上面显示选择 视图 gt 其他 Windows gt 交互式 菜单项 但我的 VS Code 版
  • 如何从查询中获取结果,其中第一列在更改之前不会重复其值

    我有一个仅返回几行的查询 但我需要以这样的方式对结果进行分组 使得前两列在其值发生变化之前不会重复 让我告诉你我的意思 这样会更容易 这是查询 select isnull d FirstName isnull d LastName as C
  • Internet Explorer 中的 JavaScript 数组索引“未定义”

    以下脚本打印不明确的字符串中每个字符的控制台 但在 Chrome 中可以正常工作 我是否必须对数组进行一些操作才能使其在所有浏览器中正常工作 The 部分浏览器支持 但并非全部 类似数组的字符访问 上面的第二种方式 不属于 ECMAScri
  • C# 简单图像调整大小:文件大小不缩小

    我对下面的代码有疑问 我下面的代码成功地运行了一个目录 并将图片的分辨率设置为较小的尺寸 但是 文件大小不会改变 例如 尺寸为 2400x1800 文件大小为 1 5MB 的图像将缩放至 800x600 但 800x600 图片的文件大小仍
  • 调用 Sub 和 Application.Run 之间的区别

    在我的企业中 我们有几个团队致力于非常简单的宏 我正在尝试使它们彼此可读并且格式相似 以便新加入者可以开始处理数据 我提到简单的宏 因为没有人会使用带参数的 Subs 无论如何 大多数都是从 Macro Recorder 派生的 一半的团队
  • JSON 反序列化为 json 中缺少键的类 [字符串可以是单个字符串或列表字符串]

    我有以下课程 Serializable public class filters public List
  • 如何处理 OS X Yosemite Core 标头中非 gcc 兼容的代码

    我维护一个混合 C 和 C 命令行程序 需要在 Linux Windows 和 OS X 上运行 我最近升级到 Yosemite 但我的 OS X 构建现在失败了 错误是 usr include dispatch object h 143
  • Plotly 桑基图组标签和颜色

    我正在使用plotly 创建桑基图 并且有内置方法使用 组 来组合节点 但是 当我使用它时 该节点的颜色将为黑色并且不显示标签 这是预期的 因为分组节点的颜色可能会有所不同 但是 我不知道如何设置该组的颜色 标签也是如此 有没有办法定义这个
  • OfficeJS 和 OneNote API 的笔记本 ID 之间的区别

    我正在尝试为 OneNote 课堂笔记本构建任务窗格加载项 我想知道当前用户是老师还是学生 为了实现这一目标 我的计划是 1 从office JS获取当前Notebook的ID2 从 OneNote API 获取 ID 从 1 的课堂笔记本
  • 使用异步 sinatra 流式传输多个主体

    我想从 javascript 启动一个长轮询请求 这很好 我希望我的 ruby prog 将多个正文部分流式传输到 javascript 为什么以下 伪 代码不起作用 require rubygems require sinatra asy