首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接关闭后如何在Sinatra中停止后台线程

连接关闭后如何在Sinatra中停止后台线程
EN

Stack Overflow用户
提问于 2011-10-03 08:10:13
回答 2查看 1.1K关注 0票数 2

我正在尝试使用Sinatra的twitter流API,并在用户搜索关键字时为他们提供实时更新。

代码语言:javascript
复制
require 'sinatra'
require 'eventmachine'
require 'em-http'
require 'json'

STREAMING_URL = 'https://stream.twitter.com/1/statuses/sample.json'

get '/' do
  stream(:keep_open) do |out|
    http = EM::HttpRequest.new(STREAMING_URL).get :head => { 'Authorization' => [ 'USERNAME', 'PASS' ] }
    buffer = ""
    http.stream do |chunk|
      puts "still chugging"
      buffer += chunk
      while line = buffer.slice!(/.+\r?\n/)
        tweet = JSON.parse(line)
        unless tweet.length == 0 or tweet['user'].nil?
            out << "<p><b>#{tweet['user']['screen_name']}</b>: #{tweet['text']}</p>" 
        end
      end
    end
  end
end

我希望在用户关闭连接时停止对em-http-request流的处理。有人知道怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-03 14:13:01

Eric的回答是关闭,但它所做的是在您的twitter流关闭后关闭响应正文(而不是客户端连接,顺便说一句),这通常是不会发生的。这应该是可行的:

代码语言:javascript
复制
require 'sinatra/streaming' # gem install sinatra-contrib
# ...

get '/' do
  stream(:keep_open) do |out|
    # ...
    out.callback { http.conn.close_connection }
    out.errback { http.conn.close_connection }
  end
end
票数 5
EN

Stack Overflow用户

发布于 2011-10-03 10:21:10

我还不太熟悉Sinatra stream API,但是您尝试过这个吗?

http.callback { out.close }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7630084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档