Skip to content

Instantly share code, notes, and snippets.

@seven1m
Created September 1, 2022 00:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seven1m/9d18479b4e0ddd5fa71b06a8b6bb166b to your computer and use it in GitHub Desktop.
Save seven1m/9d18479b4e0ddd5fa71b06a8b6bb166b to your computer and use it in GitHub Desktop.
web server in pure ruby using TCPServer
require 'socket'
server = TCPServer.new 3000
loop do
client = server.accept
method, request_target, _http_version = client.gets.strip.split
headers = {}
until (line = client.gets) =~ /^\r?\n$/
name, value = line.strip.split(': ')
headers[name] = value
end
if method.upcase == 'GET'
case request_target
when '/'
client.write "HTTP/1.1 200\r\n"
client.write "\r\n"
client.write "hello world\r\n"
else
client.write "HTTP/1.1 404\r\n"
client.write "\r\n"
client.write "resource not found\r\n"
end
else
client.write "HTTP/1.1 405\r\n"
client.write "\r\n"
client.write "method not allowed\r\n"
end
client.close
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment