Ruby 后台 TCP 服务器

Ruby background TCP Server

我希望创建一个 TCPServer,它在脚本继续正常执行时在后台侦听。 例如-

server=TCPServer.open(srvhost,srvport)
    client=server.accept 
    res=send_request_cgi({
        'uri' => "/",
        'method' => 'GET',
        'vars_get' => 
            'cmd' => rand_text_alphanumeric(10)
        }
    })
    print "#{res.headers}" 
    data=client.recv(1024)
    puts data
    client.close

这会在侦听器处暂停脚本。

Objective-服务器将始终在它应该打印的 srvport 上收到响应。

编辑-

webserv=Thread.new do
        server=TCPServer.new(srvhost,srvport)
        client=server.accept 
        data=client.recv(1024)
        if(data.empty?)
                puts 'nope'
                client.close
                server.close
                webserv.exit
        end
        puts data
        client.write(cmd)
        client.close
        server.close
        webserv.exit
        end 

您可以将您的服务器放在新的 Thread

websrv = Thread.new do
  <your server logic> # Main server loop, handle data, etc.
ensure
  <your cleanup code> # Close connections, files, etc.
end
<application code>
websrv.join # wait for web server to do its thing

不用说,在 ruby 中,您通常会将其包装在某种 BackgroundServer class 中,但基本思想是相同的。

注意 rubys threads 并不是真正并行执行;解释器只负责在它们之间来回切换。