使用异步 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 流式传输多个主体 的相关文章

  • 浏览器中的javascript:异步任务执行模型

    我正在尝试集中注意力并了解 javascript 异步在单线程浏览器环境中的工作原理 作为异步 我们可以同时处理计时器和 xhr 请求 现在假设我有类似下面的东西 function doStuff for var i 0 i lt 1000
  • Ruby Shoes 打包程序,包括应用程序中的 Shoes

    我似乎无法让 Ruby Shoes 打包程序正确创建包含 Shoes 的 exe 我正在使用 Raisins 版本 0 r1134 并从 github 替换 pack rb 打包程序制作的 exe 都是 70 80K 文件 它们显然不包括
  • 如何添加到 Ruby 中的现有哈希

    关于添加一个key gt value与 Ruby 中现有的填充哈希配对 我正在学习 Apress 的 Beginning Ruby 并且刚刚完成了哈希章节 我试图找到最简单的方法来使用哈希实现与数组相同的结果 x 1 2 3 4 x lt
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • Riod-iOS 错误:您没有写入权限“Gem::FilePermissionError”

    我已经下载了一个Riot iOS https github com vector im riot ios并遵循构建说明 当我跑步时 捆绑安装 回溯 最近一次调用 2 来自 usr bin bundle 23 in
  • Rails 返回 JSON 序列化属性 with_in Different_access

    我以前有 serialize params JSON 但这会返回 JSON 并将哈希键符号转换为字符串 我想使用符号引用哈希 这在使用哈希时最常见 我向它提供符号 Rails 返回字符串 为了避免这种情况 我创建了自己的 getter se
  • 地图、每个和收集之间有什么区别? [复制]

    这个问题在这里已经有答案了 在 Ruby 中 功能之间有什么区别吗 each map and collect each不同于map and collect but map and collect是相同的 技术上map是一个别名collect
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • Ruby:如何计算相对于另一条路径的路径?

    假设我知道我开始的绝对路径和我试图到达的绝对路径 first first path second second path 现在我想弄清楚如何构建一条相对于第一个路径 例如 answer should be first path second
  • 从 ActiveRecord 获取表名

    I used ActiveRecord Base set table name在动态创建的 ActiveRecord 类上设置我的表名称 现在我需要知道稍后如何获得该值 api 文档没有提及如何执行此操作 另外 我无法从 ActiveRec
  • 回形针如何更改基本名称(文件名)?

    我正在尝试更改照片的基本名称 文件名 在我的模型中我有 attr accessor image url basename has attached file image styles gt original gt 300x250 gt pn
  • 等待多个异步调用完成后再继续

    因此 我有一个加载页面 并通过 jquery get 发出多个请求以使用其值填充下拉列表 function LoadCategories Category LoadPositions Position LoadDepartments Dep
  • 如何从数组中删除空白元素?

    我有以下数组 cities Kathmandu Pokhara Dharan Butwal 我想从数组中删除空白元素并想要以下结果 cities Kathmandu Pokhara Dharan Butwal 有没有类似的方法compact
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • 使用异步工作流程并行化的最佳实践

    假设我想抓取一个网页并提取一些数据 我很可能会写这样的东西 let getAllHyperlinks url string async let req WebRequest Create url let rsp req GetRespons
  • 通过多个回调优雅地传递“点击事件”

    当未登录的用户单击给定的按钮时 我想停止该事件 收集他的 oauth 收集他的电子邮件 如果我没有 然后执行该事件 我想用 javascript 来做所有事情 因为这会让事情变得更加简单 这就是我执行它的方式 我有两个问题 有没有更优雅的方

随机推荐

  • 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