Sha256: 813fc0d9e283a3fe9c77acd67383277d31762a69e4ab8a3e5fcc2d49d99e4db4

Contents?: true

Size: 764 Bytes

Versions: 84

Compression:

Stored size: 764 Bytes

Contents

require 'http/parser'
require 'socket'

def handle_client(socket)
  pending_requests = []
  parser = Http::Parser.new
  parser.on_message_complete = proc { pending_requests << parser }

  while (data = socket.recv(8192))
    parser << data
    write_response(socket) while pending_requests.shift
  end
rescue IOError, SystemCallError => e
  # ignore
ensure
  socket.close
end

def write_response(socket)
  status_code = "200 OK"
  data = "Hello world!\n"
  headers = "Content-Type: text/plain\r\nContent-Length: #{data.bytesize}\r\n"
  socket.write "HTTP/1.1 #{status_code}\r\n#{headers}\r\n#{data}"
end

server = TCPServer.open(1235)
puts "pid #{Process.pid} threaded listening on port 1235"
while socket = server.accept
  Thread.new { handle_client(socket) }
end

Version data entries

84 entries across 84 versions & 1 rubygems

Version Path
polyphony-1.6 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.5 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.4 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.3 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.2.1 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.2 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.1.1 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.1 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.0.2 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.0.1 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-1.0 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.6 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.5 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.4 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.3 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.2 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99.1 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.99 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.98 examples/performance/thread-vs-fiber/threaded_server.rb
polyphony-0.97 examples/performance/thread-vs-fiber/threaded_server.rb