Sha256: f8dee778f4a591f9b7db674692c8da9d69f824b220b01f6504e94eb65c700bc5
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true require 'bundler/inline' gemfile do source 'https://rubygems.org' gem 'h1p', path: '../h1p' # gem 'polyphony', path: '.' end # require 'polyphony' require 'h1p' module ::Kernel def trace(*args) STDOUT << format_trace(args) end def format_trace(args) if args.first.is_a?(String) if args.size > 1 format("%s: %p\n", args.shift, args) else format("%s\n", args.first) end else format("%p\n", args.size == 1 ? args.first : args) end end def monotonic_clock ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) end end def handle_client(conn) Thread.new do reader = proc do |len, buf, buf_pos| trace(len:, buf:, buf_pos:) s = conn.readpartial(len) buf ? (buf << s) : +s rescue EOFError nil end parser = H1P::Parser.new(reader, :server) # parser = H1P::Parser.new(conn, :server) while (headers = parser.parse_headers) parser.read_body unless parser.complete? conn << "HTTP/1.1 200 OK\r\nContent-Length: 14\r\n\r\nHello, world!\n" end rescue Errno::ECONNRESET, Errno::EPIPE # ignore rescue H1P::Error puts 'Got invalid request, closing connection...' ensure parser = nil conn.close rescue nil end end puts "Serving HTTP on port 1234..." s = TCPServer.new('0.0.0.0', 1234) while true c = s.accept handle_client(c) end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
polyphony-1.6 | examples/pipes/http_server.rb |
polyphony-1.5 | examples/pipes/http_server.rb |