Python: асинхронный TCP-сокет-сервер - PullRequest
4 голосов
/ 19 ноября 2009

Я ищу http://docs.python.org/library/socketserver.html, чтобы попытаться обработать асинхронные запросы с помощью сервера сокетов в python. В самом низу есть пример, но это не имеет смысла. Он говорит, что вы используете порт 0, который назначает произвольный неиспользуемый порт. Но как узнать, какой порт использовать для клиента, если они не в одной программе? Я не совсем понимаю, как сделать это полезным.

Ответы [ 4 ]

9 голосов
/ 19 ноября 2009

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

5 голосов
/ 19 ноября 2009

В приведенном вами примере они выбирают порт:

# 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, если вы серьезно относитесь к написанию асинхронной обработки

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

Вам нужно получить порт, который был назначен на socketserver после того, как bind будет сделано: в этом случае, вероятно, будет через ip, port = server.server_address.

Произвольный порт - это просто, если вы хотите создать сервер без указания порта: ОС назначит доступный порт.

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

0 голосов
/ 19 ноября 2009
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address

...

client(ip, port, "Hello World 1")

Значение PORT 0 говорит: «Мне все равно, какой это номер порта», поэтому значение port server_address присваивается вызовом ThreadedTCPServer (). Это не ноль. Позже вы передаете это значение port клиенту, который его использует.

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