Как найти случайный открытый порт в Ruby? - PullRequest
4 голосов
/ 13 мая 2011

Если вы позвоните DRb.start_service(nil, some_obj), а затем DRb.uri, вы получите локальный URI, включая номер порта, который другой процесс может использовать для совершения вызовов.

Я просто хочу получить некоторыеКод найти случайный доступный порт и вернуть этот номер порта, вместо запуска полноценной службы DRb.Есть ли простой способ сделать это в Ruby?

Ответы [ 2 ]

18 голосов
/ 13 мая 2011

Не пробовал, но это может сработать.

С http://wiki.tcl.tk/2230

Процесс может позволить системе автоматически назначать порт. Для
и интернет-домен и XNS домен, указав номер порта 0 перед вызовом bind () запрашивает Система для этого.

Также см. http://www.ruby -doc.org / stdlib / libdoc / socket / rdoc / classes / Socket.html # M003723

 require 'socket'

 # use Addrinfo
 socket = Socket.new(:INET, :STREAM, 0)
 socket.bind(Addrinfo.tcp("127.0.0.1", 0))
 p socket.local_address #=> #<Addrinfo: 127.0.0.1:2222 TCP>

Обратите внимание на использование порта 0 в вызове socket.bind. Ожидаемое поведение: local_address будет содержать случайный открытый порт.

1 голос
/ 04 октября 2018

Вы можете попробовать random-port , простой Ruby gem (я автор):

require 'random-port'
port = RandomPort::Pool.new.acquire

Лучше всего использовать блок:

RandomPort::Pool.new.acquire do |port|
  # Use the port, it will be returned back
  # to the pool afterward.
end

Пул является поточно-ориентированным и гарантирует, что порт не будет использоваться другим потоком или где-либо еще в приложении, пока он не будет освобожден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...