Несколько программ, использующих один и тот же порт UDP? Возможный? - PullRequest
0 голосов
/ 12 ноября 2009

В настоящее время у меня есть небольшой сценарий Python, который я использую для порождения нескольких исполняемых файлов (серверов голосового чата), и в следующей версии программного обеспечения серверы могут получать сигналы пульса на порт UDP. (Возможно, на одной машине будут тысячи серверов, начиная с портов 7878 и выше)

Моя проблема в том, что эти серверы могут (читай: будут) работать на той же машине, что и мой скрипт на Python, и я планировал открыть порт UDP и просто отправить контрольное сообщение, ждать ответа и вуаля .. .Я мог бы перезапустить серверы, если / если они не отвечают, убив задачу и перезагрузив сервер.

Проблема в том, что я не могу открыть порт UDP, который уже используется сервером. Это можно обойти? Руководитель проекта по-прежнему осуществляет сердцебиение, поэтому я уверен, что любые предложения о том, как можно реализовать систему сердцебиения, также будут приветствоваться. - Это довольно общий сценарий, хотя он может применяться и к другим программам, поэтому мой основной фокус по-прежнему связан с этим портом UDP.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

Это невозможно. Вам нужно будет иметь одну ведущую программу UDP, которая обрабатывает все соединения UDP через один порт и взаимодействует с вашими серверами другим способом (UDP на разных портах, именованные каналы, ...)

1 голос
/ 12 ноября 2009

Я почти уверен, что это возможно в Linux; Я не знаю о других UNIX.

Существует два способа распространения файлового дескриптора от одного процесса к другому:

  • Когда процесс выполняет fork (), дочерний объект наследует все файловые дескрипторы родительского элемента.
  • Процесс может отправить дескриптор файла другому процессу через «доменный сокет UNIX». См. sendmsg () и recvmsg () . В Python модуль расширения _multiprocessing сделает это за вас; см _multiprocessing.sendfd() и _multiprocessing.recvfd().

Я не экспериментировал с несколькими процессами, слушающими UDP-сокеты. Но для TCP, в Linux, если все процессы прослушивают один сокет TCP, один из них будет выбран случайным образом при входе в соединение. Поэтому я подозреваю, что Linux что-то ощутимо, когда все процессы слушают на том же сокете UDP.

Попробуйте и дайте нам знать!

...