【问题标题】:how multiprocesses/multithreads Ruby Web Servers work?多进程/多线程 Ruby Web 服务器如何工作?
【发布时间】:2014-05-29 20:10:19
【问题描述】:

以下代码是对具有 3 个工作人员(进程)的 Web 服务器的模拟,并且对于每个新连接,所选工作人员都会创建一个新线程。我无法理解的是如何选择工作人员来响应即将到来的连接?以及所有三个工作人员如何毫无问题地监听类似的端口。

require 'socket'
require 'thread'

server = TCPServer.new('0.0.0.0', 8080)
3.times do
 break unless fork
end

loop do
 connection = server.accept
 Thread.new do
        request = connection.gets

        connection.puts request
        connection.puts Process.pid.to_s # this will change with each request.
        connection.puts "status"
        connection.puts "Headers"
        connection.puts "Body"
        connection.close
 end
end

【问题讨论】:

    标签: ruby multithreading sockets process webserver


    【解决方案1】:

    TCP 服务器侦听端口,等待新的连接请求。当一个端口到来时,它为特定客户端(在另一个端口上)创建一个专用套接字,将其交给工作人员,然后继续侦听主端口。

    connection = server.accept
    

    上面的行是worker告诉服务器“我准备好接收一个新的socket”的那一行,服务器将返回它为最新的客户端请求创建的socket。

    如果多个工作人员正在等待一个新的套接字(都调用server.accept),服务器会选择其中一个(不应该是重要的,但明显的实现是“先到先得”),其余的只是等待下一个请求......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多