我正在尝试使用Sinatra的twitter流API,并在用户搜索关键字时为他们提供实时更新。
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流的处理。有人知道怎么做吗?
发布于 2011-10-03 14:13:01
Eric的回答是关闭,但它所做的是在您的twitter流关闭后关闭响应正文(而不是客户端连接,顺便说一句),这通常是不会发生的。这应该是可行的:
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发布于 2011-10-03 10:21:10
我还不太熟悉Sinatra stream API,但是您尝试过这个吗?
http.callback { out.close }
https://stackoverflow.com/questions/7630084
复制相似问题