Простой протокол обмена строк между сервером и клиентом - PullRequest
2 голосов
/ 04 ноября 2010

Я ищу абстрактный и чистый способ обмена строками между двумя программами на Python. Протокол действительно прост: клиент / сервер отправляет строку серверу / клиенту и выполняет соответствующее действие - я полагаю, через обработчик - и отвечает ИЛИ НЕ на другую сторону другой строкой. Строки могут быть тремя вещами: подтверждение, сигнализирующее одну сторону о том, что другая еще жива; маринованный класс, содержащий команду при переходе от «клиента» к «серверу» или ответ при переходе от «сервера» к «клиенту»; и, наконец, команда «блокировки», которая сигнализирует стороне разговора о том, что другая работает, и больше никаких вопросов не следует задавать, пока не будет получен другой пакет блокировки.

Я смотрел на встроенный в Python SocketServer.TCPServer, но это слишком низкий уровень, он не может легко поддерживать переподключение, и клиент должен использовать интерфейс сокетов, который я предпочел инкапсулировать.
Затем я изучил искривленную структуру, в частности протокол LineOnlyReceiver и примеры серверов, но обнаружил, что начальная кривая обучения слишком крута, онлайновая документация предполагает слишком много знаний и общее отсутствие примеров и хорошей документации (за исключением 2005 г. 'Рейли книга, это все еще в силе?).
Затем я попробовал библиотеку pyliblo, которая идеально подходит для этой задачи, увы, она является однонаправленной, нет способа «ответить» клиенту, и мне нужно, чтобы ответ был связан с конкретной командой.

Итак, мой вопрос: существует ли существующий каркас / библиотека / модуль, который позволяет мне иметь клиентский объект на сервере, читать команды и отправлять ответы и серверный объект на клиенте, чтобы читать ответы от и отправку команд, которые я могу использовать после простой настройки (клиент, адрес сервера - хост: порт, сервер, вы прослушиваете порт X), имеющий базовый сокет, механизм переподключения и т. д.?
заранее спасибо за любой ответ (простите мой английский и неопытность, это мой первый вопрос)

Ответы [ 2 ]

0 голосов
/ 04 ноября 2010

То, что вы хотите сделать, похоже на RPC, поэтому мне приходят на ум XMLRPC или JSON RPC, если вы не хотите использовать XML.

Python имеет библиотеку XMLRPC, которую вы можете использовать, он использует HTTP в качестве транспорта, поэтому он также решает вашу проблему не слишком низкого уровня.Однако, если бы вы могли предоставить более подробную информацию о том, что именно вы хотите сделать, возможно, мы могли бы предложить лучшее решение.

0 голосов
/ 04 ноября 2010

Python также предоставляет модуль asyncchat , который упрощает большую часть поведения сервера / клиента, характерного для общения в чате.

...