class Firehose::Client::Consumer::HttpLongPoll
Connect to Firehose
via HTTP Long Polling and consume messages.
Constants
- JITTER
Attributes
logger[R]
url[R]
Public Class Methods
new(url, logger = Firehose.logger)
click to toggle source
# File lib/firehose/client/consumer.rb, line 59 def initialize(url, logger = Firehose.logger) @url, @logger = url, logger end
Public Instance Methods
request(last_sequence=0)
click to toggle source
# File lib/firehose/client/consumer.rb, line 63 def request(last_sequence=0) http = EM::HttpRequest.new(url, :inactivity_timeout => 0).get(:query => {'last_message_sequence' => last_sequence}) http.callback do case status = http.response_header.status when 200 json = JSON.parse(http.response) next_sequence = json['last_sequence'].to_i message = json['message'] logger.info "HTTP 200 | Next Sequence: #{next_sequence} - #{message[0...40].inspect}" EM::add_timer(jitter) { request next_sequence } when 204 logger.info "HTTP 204 | Last Sequence #{last_sequence}" EM::add_timer(jitter) { request last_sequence } else logger.error "HTTP #{status} | Failed" end end http.errback do logger.error "Connection Failed" end end
Private Instance Methods
jitter()
click to toggle source
Random jitter between long poll requests.
# File lib/firehose/client/consumer.rb, line 88 def jitter rand*JITTER end