当投稿は主に以下のブログの翻訳です。
Building a 30 line HTTP server in Ruby
ブログにて詳細な説明をしています。
RubyでHTTPサーバを立てる①(ブログ)
[追記]
この記事の続きを書きました。
合わせてご覧ください。
RubyでHTTPサーバを立てる②(ブログ)
RubyでHTTPサーバを立て、その上でRailsを動かす(Qiita)
ソースコードはGitHubにアップしています。
以下、ソースコードのみ貼り付けます。
tcp_server.rb
require 'socket'
server = TCPServer.new(5678)
while session = server.accept
session.puts "hello time is #{Time.now}"
session.close
end
tcp_client.rb
require 'socket'
server = TCPSocket.new 'localhost', 5678
while line = server.gets
puts line
end
server.close
http_server.rb
require 'socket'
require 'rack'
require 'rack/lobster'
app = Rack::Lobster.new
server = TCPServer.new 5678
while session = server.accept
request = session.gets
puts request
method, full_path = request.split(' ')
path, query = full_path.split('?')
status, headers, body = app.call({
'REQUEST_METHOD' => method,
'PATH_INFO' => path,
'QUERY_STRING' => query
})
session.print "HTTP/1.1 #{status}\r\n"
headers.each do |key, value|
session.print "#{key}: #{value}\r\n"
end
session.print "\r\n"
body.each do |part|
session.print part
end
session.close
end