你如何使用Ruby找到一个免费的TCP服务器端口?

Mar*_*ais 10 ruby sockets http

我正在尝试创建一个使用一次的HTTP服务器来处理单个回调,并需要帮助在Ruby中找到一个免费的TCP端口.

这是我正在做的事情的骨架:

require 'socket'
t = STDIN.read
port = 8081
while s = TCPServer.new('127.0.0.1', port).accept
  puts s.gets
  s.print "HTTP/1.1 200/OK\rContent-type: text/plain\r\n\r\n" + t
  s.close
  exit
end
Run Code Online (Sandbox Code Playgroud)

(它回应第一个连接的标准输入,然后死掉.)

如何自动找到要监听的空闲端口?

这似乎是在远程服务器上启动作业的唯一方法,然后使用唯一的作业ID回调.然后可以查询此作业ID以获取状态信息.为什么原始设计师在安排我永远不会知道的工作时不能只返回作业ID.无法使用单个端口,因为可能会发生与多个回调的冲突; 这样端口只用了+ - 5秒.

Aar*_*nni 65

将0输入为端口号.这将导致系统从临时端口范围中为您选择一个端口.创建服务器后,您可以询问它的addr,它将包含服务器绑定的端口.

server = TCPServer.new('127.0.0.1', 0)
port = server.addr[1]
Run Code Online (Sandbox Code Playgroud)

  • 回答我自己的问题,使用`socket.getsockname.unpack("snA*")[1]` (3认同)

gnu*_*nud -9

我想您可以按顺序尝试所有> 5000 的端口(例如)。但是您将如何与客户端程序通信您正在侦听哪个端口?如果您需要在不同环境之间移动脚本,那么决定端口并使其易于配置似乎更简单。

对于 HTTP,标准端口是 80。我见过的替代端口是 8080、880 和 8000。

  • 这不应该是公认的答案;请参阅下面的http://stackoverflow.com/a/201528/3528。 (2认同)