Sha256: 0e38151d1f50a70becb23fa093e3d49f9b491f70496ccc6b0f4353e2fb907c72
Contents?: true
Size: 1.4 KB
Versions: 3
Compression:
Stored size: 1.4 KB
Contents
# frozen_string_literal: true require "httpx/selector" require "httpx/channel" module HTTPX class Connection def initialize(options) @options = Options.new(options) @timeout = options.timeout @selector = Selector.new @channels = [] end def running? !@channels.empty? end def next_tick(timeout: @timeout.timeout) @selector.select(timeout) do |monitor| if (channel = monitor.value) channel.call end monitor.interests = channel.interests end end def close @channels.each(&:close) next_tick until @channels.empty? end def reset @channels.each(&:reset) end def build_channel(uri, **options) channel = Channel.by(uri, @options.merge(options)) register_channel(channel) channel end # opens a channel to the IP reachable through +uri+. # Many hostnames are reachable through the same IP, so we try to # maximize pipelining by opening as few channels as possible. # def find_channel(uri) @channels.find do |channel| channel.match?(uri) end end private def register_channel(channel) monitor = @selector.register(channel, :w) monitor.value = channel channel.on(:close) do @channels.delete(channel) @selector.deregister(channel) end @channels << channel end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
httpx-0.0.4 | lib/httpx/connection.rb |
httpx-0.0.3 | lib/httpx/connection.rb |
httpx-0.0.2 | lib/httpx/connection.rb |