multithreading - how multiprocesses/multithreads Ruby Web Servers work? -
the following code simulation of web server has 3 workers (processes) , each new connection selected worker creates new thread. cannot understand how worker selected respond comming connection? , how 3 workers listening similar port without problem.
require 'socket' require 'thread' server = tcpserver.new('0.0.0.0', 8080) 3.times break unless fork end loop connection = server.accept thread.new request = connection.gets connection.puts request connection.puts process.pid.to_s # change each request. connection.puts "status" connection.puts "headers" connection.puts "body" connection.close end end
a tcp server listens port, waiting new connection request. when 1 comes, creates dedicated socket specific client (on port), hands off worker, , resumes listening main port.
connection = server.accept
the above line line worker tells server "i'm ready receive new socket", , server return socket created latest client request.
if more 1 worker waiting new socket (all call server.accept
) server chooses one of them (it not supposed important one, obvious implementation "first in first served"), , rest wait next request...
Comments
Post a Comment