mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
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
74 lines
1.4 KiB
Ruby
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
|