Питон:асинхронный TCP-сервер сокетов
-
21-09-2019 - |
Вопрос
я ищу http://docs.python.org/library/socketserver.html чтобы попытаться обрабатывать асинхронные запросы с помощью сервера сокетов в Python.В самом низу есть пример, но он не имеет смысла.В нем говорится, что вы используете порт 0, который назначает произвольный неиспользуемый порт.Но как узнать, какой порт использовать для клиента, если они не находятся в одной программе?Я не совсем понимаю, как сделать это полезным.
Решение
Поскольку клиент реализован в том же сценарии, что и сервер, порт известен.В реальном сценарии вам следует указать порт для вашего демона.Помимо того, что ваши клиенты знают, к какому порту подключаться, вам также может потребоваться знать, чтобы вы могли открыть брандмауэры между вашими клиентами и вашим сервером.
Другие советы
В приведенном вами примере они извлекают порт:
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
Однако вам действительно стоит заглянуть на сайт www.twistedmatrix.com, если вы серьезно относитесь к написанию асинхронной обработки :)
Вам необходимо получить порт, назначенный socketserver
однажды bind
готово:в данном случае это, вероятно, пройдет через ip, port = server.server_address
.
Произвольный порт подойдет, если вы хотите создать сервер без указания порта:ОС назначит доступный порт.
Конечно, также должен быть способ указать, к какому порту привязываться.
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
Значение PORT 0 говорит: «Мне не важно, какой это номер порта», поэтому значение server_address port
значение присваивается вызовом ThreadedTCPServer().Это не ноль.Позже вы пройдете это port
ценность для клиента, который его использует.