Ruby后台TCP服务器

时间:2018-04-23 06:07:03

标签: ruby sockets tcpserver

我希望创建一个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

这会暂停监听器的脚本。

目标 - 服务器将始终在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 

1 个答案:

答案 0 :(得分:0)

您可以将服务器置于新的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类中,但基本思路是一样的。

请注意,rubys 线程并不真正并行执行;解释器只需要在它们之间来回切换。