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

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -