Одновременно войти и принять командную строку используя Twisted - PullRequest
3 голосов
/ 09 ноября 2011

Я создаю приложение с использованием Twisted, в котором сервер содержит несколько таймеров, и несколько раз в секунду он записывает значения таймера клиенту через UDP. Клиент должен иметь возможность отправлять различные команды (например, «таймер паузы 1» или «таймер сброса 2») на сервер для изменения таймеров, отправляемых клиенту. Проблема, которую я вижу, состоит в том, что клиент постоянно регистрирует значения таймера, полученные от сервера, поэтому я не уверен, как я могу сделать это без блокировки. Я хочу сделать это асинхронно, без каких-либо потоков. Twisted предоставляет множество вариантов асинхронного ввода-вывода, но я действительно не уверен, что будет наиболее подходящим, потому что некоторые из них (например, протокол basic.LineReceiver) все еще блокируются во время ожидания ввода пользователя.

Спасибо заранее, Ben

P.S. это мой первый пост, поэтому, пожалуйста, дайте мне знать о любых улучшениях, которые я могу сделать.

1 Ответ

1 голос
/ 09 ноября 2011

Вы можете использовать twisted.internet.stdio для неблокирующего стандартного ввода-вывода. Это обеспечивает альтернативный потоковый, упорядоченный, ориентированный на соединение транспорт, который можно использовать с любым протоколом, который обычно работает на таком транспорте (другие подобные транспорты включают TCP и SSL).

См. Stdin.py и stdiodemo.py, связанные с http://twistedmatrix.com/documents/current/core/examples/

Кроме того, LineReceiver не «блокирует при ожидании пользовательского ввода». Это просто протокол, он даже не выполняет никаких операций ввода-вывода.

...