加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 使用sinatra流API的异步请求

发布时间:2020-12-16 19:34:58 所属栏目:百科 来源:网络整理
导读:我使用async_sinatra gem来实现异步路由,但我在某个地方发现了一个帖子,说可以使用Sinatra的流API来代替async_sinatra.可以使用流媒体实现以下相同的功能吗? require 'em-hiredis'require 'sinatra/async'class App Sinatra::Base register Sinatra::Async
我使用async_sinatra gem来实现异步路由,但我在某个地方发现了一个帖子,说可以使用Sinatra的流API来代替async_sinatra.可以使用流媒体实现以下相同的功能吗?
require 'em-hiredis'
require 'sinatra/async'

class App < Sinatra::Base
  register Sinatra::Async

  def redis
    @redis ||= EM::Hiredis.connect
  end

  aget '/' do
    redis.blpop('abcdef',15).
      callback {|x| body "x=#{x}"}.
      errback {|e| body "e=#{e}"}
  end

  run! if app_file == $0
end

解决方法

回答我自己的问题:
require 'em-hiredis'
require 'sinatra/base'

class App < Sinatra::Base
  def redis
    @redis ||= EM::Hiredis.connect
  end

  get '/' do
    stream :keep_open do |out|
      redis.blpop('abcdef',15).callback do |x|
        out << "x=#{x}"
        out.close
      end.errback do |e|
        out << "e=#{e}"
        out.close
      end
    end
  end

  run! if app_file == $0
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读