Ошибка 99 при использовании Pyro4 на разных машинах
Часть кода, который я использую, основана на примере шины сообщений на https://github.com/irmen/Pyro4/tree/master/examples/messagebus. Я установил сервер имен Pyro4 на одной машине. Сервер и издатель также работают на этом компьютере.
Подписчик работает, если я запускаю его на этом компьютере, но я получаю сообщение об ошибке, если пытаюсь запустить его на другом компьютере. Мне это нужно для работы на нескольких разных машинах.
Ошибка, которую я получаю: "ошибка: [Errno 99] Невозможно назначить запрошенный адрес"
Строка, где мой код терпит неудачу:
d = Pyro4.Daemon(host = NS_HOST, port = 6193)
где NS_HOST - это имя хоста, на котором работает сервер имен, и 6193 - это порт, который использует ns. По некоторым причинам это, кажется, не работает где-нибудь кроме localhost. Нужно ли делать что-то другое? Я знаю, что могу подключиться к ns этого хоста, потому что не получаю сообщение об ошибке с:
Pyro4.locateNS(host = NS_HOST, port = 6193)
Вышеупомянутая строка в настоящее время отсутствует в моем коде (я просто использовал ее, чтобы проверить, что у меня не было проблем с неправильным именем хоста, брандмауэрами и т. Д.), Но мне было интересно, есть ли способ, которым я мог бы объединить это с Pyro4.Daemon() чтобы заставить код работать - есть идеи?
Я использую Python 2.7.
Спасибо за вашу помощь!
1 ответ
(Часто помогает включить фактическую трассировку стека, а не только окончательное сообщение об ошибке. И "Ошибка 99" также немного неописательна.)
Однако это сообщение об ошибке является частью OSError, которая не вызвана самим Pyro. Это ошибка из библиотеки сокетов вашей ОС, потому что вы пытаетесь привязать демона Pyro к неправильному адресу сетевого интерфейса: вы предоставляете адрес сервера имен, который работает на другом узле.
Параметры 'host' и 'port' для Daemon не совпадают с теми, которые вы предоставляете функции locateNS. См. https://pyro4.readthedocs.io/en/stable/servercode.html Обычно их вообще не требуется указывать, а просто позволяет Pyro определить подходящие значения по умолчанию.