Я пытаюсь создать одноразовый HTTP-сервер для обработки одного обратного вызова и мне нужна помощь в поиске свободного порта TCP в Ruby.
Это скелет того, что я делаю:
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
(повторяет стандартный ввод для первого соединения и затем умирает.)
Как я могу автоматически найти свободный порт для прослушивания?
Это, кажется, единственный способ запустить задание на удаленном сервере, который затем перезванивает с уникальным идентификатором задания. Этот идентификатор задания может быть запрошен для получения информации о состоянии. Почему оригинальные дизайнеры не могли просто вернуть идентификатор работы при планировании работы, я никогда не узнаю. Один порт не может быть использован, потому что могут возникнуть конфликты с несколькими обратными вызовами; таким образом, порты используются только в течение + - 5 секунд.