httpx/test/support/servlets/keep_alive.rb
HoneyryderChuck 84db0072fb new :stream_bidi plugin
this plugin is an HTTP/2 only plugin which enables bidirectional streaming

the client can continue writing request streams as response streams arrive midway

Closes https://github.com/HoneyryderChuck/httpx/discussions/71
2025-04-04 00:21:12 +01:00

74 lines
1.4 KiB
Ruby

# frozen_string_literal: true
require_relative "test"
class KeepAliveServer < TestServer
class KeepAliveApp < WEBrick::HTTPServlet::AbstractServlet
def do_GET(_req, res) # rubocop:disable Naming/MethodName
res.status = 200
res["Connection"] = "Keep-Alive"
res["Content-Type"] = "application/json"
res.body = "{\"counter\": infinity}"
end
end
class KeepAliveMax2App < WEBrick::HTTPServlet::AbstractServlet
def do_GET(_req, res) # rubocop:disable Naming/MethodName
res.status = 200
res["Connection"] = "Keep-Alive"
res["Keep-Alive"] = "max=2"
res["Content-Type"] = "application/json"
res.body = "{\"counter\": 2}"
end
end
def initialize(options = {})
super
mount("/", KeepAliveApp)
mount("/2", KeepAliveMax2App)
end
end
class KeepAlivePongServer < TestHTTP2Server
attr_reader :pings, :pongs
def initialize(**)
@sent = false
super
end
private
def handle_stream(conn, stream)
# responds once, then closes the connection
if @sent
conn.goaway
@sent = false
else
super
@sent = true
end
end
end
class KeepAlivePongThenCloseSocketServer < TestHTTP2Server
attr_reader :pings, :pongs
def initialize
@sent = false
super
end
private
def handle_connection(conn, sock)
super
conn.on(:stream) do |stream|
stream.on(:close) do
@sent = true
close_socket(sock)
end
end
end
end