2010-11-04 3 views
2

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

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

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

ответ

0

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

+0

Да! это есть! большое спасибо! – uovobw

0

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

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