class Polyphony::HTTP::Server::HTTP2Adapter
HTTP2 server adapter
Constants
- UPGRADE_MESSAGE
Public Class Methods
new(conn, opts, upgrade_headers = nil)
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 16 def initialize(conn, opts, upgrade_headers = nil) @conn = conn @opts = opts @upgrade_headers = upgrade_headers @interface = ::HTTP2::Server.new @connection_fiber = Fiber.current @interface.on(:frame, &method(:send_frame)) @streams = {} end
upgrade_each(socket, opts, headers, &block)
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 11 def self.upgrade_each(socket, opts, headers, &block) adapter = new(socket, opts, headers) adapter.each(&block) end
Public Instance Methods
close()
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 75 def close @conn.close end
each(&block)
click to toggle source
Iterates over incoming requests
# File lib/polyphony/http/server/http2.rb, line 50 def each(&block) @interface.on(:stream) { |stream| start_stream(stream, &block) } upgrade if @upgrade_headers while (data = @conn.readpartial(8192)) @interface << data snooze end rescue SystemCallError, IOError # ignore ensure finalize_client_loop end
finalize_client_loop()
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 69 def finalize_client_loop @interface = nil @streams.each_key(&:stop) @conn.close end
send_frame(data)
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 27 def send_frame(data) @conn << data rescue Exception => e @connection_fiber.transfer e end
start_stream(stream, &block)
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 64 def start_stream(stream, &block) stream = Stream.new(stream, &block) @streams[stream] = true end
upgrade()
click to toggle source
# File lib/polyphony/http/server/http2.rb, line 40 def upgrade @conn << UPGRADE_MESSAGE settings = @upgrade_headers['HTTP2-Settings'] Fiber.current.schedule(nil) @interface.upgrade(settings, @upgrade_headers, '') ensure @upgrade_headers = nil end