TCP Socket на стороне сервера Использование Python с select в Windows - PullRequest
0 голосов
/ 11 июля 2019

Пытаясь найти оптимизацию для моего сервера на python, я наткнулся на концепцию под названием select. Пытаясь найти любой код, который можно использовать, независимо от того, где я искал, трудно найти совместимость Windows с этой темой.

Есть идеи, как запрограммировать TCP-сервер с помощью select на windows? Я знаю об идее разблокировки сокетов для поддержания совместимости с ней. Любые предложения будут приветствоваться.

1 Ответ

1 голос
/ 11 июля 2019

Использование select() в Windows на 99% такое же, как и в других ОС, с некоторыми незначительными изменениями. Незначительные изменения (по крайней мере те, о которых я знаю):

  1. В Windows select() работает только для реальных сетевых сокетов. В частности, не пытайтесь select() на stdin под Windows, так как это не сработает.

  2. В Windows, если вы пытаетесь подключить неблокирующее TCP-соединение, и TCP-соединение прерывается асинхронно, вы получите уведомление об этом сбое только через третий («исключение») fd_set. (В других ОС вы получите уведомление о том, что TCP-сокет, к которому не удалось подключиться, также готов для чтения / записи)

  3. В Windows select() потерпит неудачу, если вы не передадите в нее хотя бы один действительный сокет (поэтому вы не можете использовать select([], [], [], timeoutInSeconds) в качестве альтернативы time.sleep(), как в некоторых другие ОС)

Кроме этого select() для Windows похоже на select() для любой другой ОС. (Если ваш реальный вопрос о том, как вообще использовать select(), вы можете найти информацию об этом с помощью веб-поиска)

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