J'essaie de créer un serveur HTTP à usage unique pour gérer un seul rappel et j'ai besoin d'aide pour trouver un port TCP libre dans Ruby.Comment trouvez-vous un port de serveur TCP gratuit en utilisant Ruby?
C'est le squelette de ce que je fais:
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
(Il fait écho entrée standard à la première connexion, puis meurt.)
Comment puis-je trouver automatiquement un port libre d'écouter sur?
Cela semble être le seul moyen de démarrer un travail sur un serveur distant qui appelle ensuite avec un ID de travail unique. Cet ID de travail peut ensuite être interrogé pour obtenir des informations sur l'état. Pourquoi les concepteurs d'origine ne pouvaient pas simplement renvoyer l'ID du travail lors de la planification du travail que je ne connaîtrai jamais. Un seul port ne peut pas être utilisé car des conflits avec plusieurs rappels peuvent se produire; de cette façon, les ports ne sont utilisés que pendant + - 5 secondes.
Voir (nouveau) dernier paragraphe de la question. –
Ceci ne devrait pas être la réponse acceptée; voir http://stackoverflow.com/a/201528/3528 ci-dessous. –