Буферы протоколов являются «легковесными» в том смысле, что они создают очень компактное представление проводов, тем самым экономя пропускную способность, память, хранилище и т. д., оставаясь при этом очень универсальными и кросс-языковыми. Конечно, мы много используем их в Google, но неясно, заботятся ли вы вообще об этих характеристиках производительности — вы, похоже, используете слово «облегченный» в совершенно ином смысле, чем строго связанный. с (умственной) нагрузкой на вас, программиста, а не всех с (вычислительной) нагрузкой на компьютеры и сети ;-).
Если вы не заботитесь о том, чтобы тратить гораздо больше пропускной способности/памяти/и т. д., чем могли бы, и вас также не волнует возможность кодировать участвующие подсистемы на разных языках, то буферы протоколов могут быть не оптимальными для вас.
Как и pickling
, если я правильно понял ваше «несколько безопасное» требование: распаковка правильно сконструированной вредоносной маринованной строки может выполнить произвольный код на распаковывающей машине. На самом деле, HTTP не является «несколько безопасным» в несколько ином смысле: в этом протоколе нет ничего, что помешало бы злоумышленникам «пронюхать» ваш трафик (поэтому вам никогда не следует использовать HTTP для отправки конфиденциальной полезной нагрузки, если, возможно, вы не используете надежное шифрование на полезной нагрузки перед отправкой и отменить ее после получения). Для безопасности (опять же, в зависимости от того, какое значение вы вкладываете в это слово) вам нужен HTTPS или (проще настроить, не требует покупки сертификатов!-) SSH-туннели.
Как только вы установите туннель SSH между двумя машинами (для Python может помочь paramiko
, но даже выполнение это через сценарии оболочки или иным образом, напрямую управляя клиентом командной строки ssh
, не так уж плохо ;-) вы можете запускать на нем любой протокол (например, HTTP в порядке), поскольку конечные точки туннеля становятся доступными как заданные пронумерованные порты, на которых Вы можете открыть сокет. Лично я бы рекомендовал JSON вместо XML для кодирования полезной нагрузки — см. здесь XMLRPC- например, сервер и клиент RPC на основе JSON, но я думаю, что использование сервера и клиента XMLRPC, которые поставляются со стандартной библиотекой Python, еще проще, поэтому, вероятно, ближе к тому, что вы ищете. Зачем вам еще Cherpy? Не стала ли производительность вдруг превзойти простоту только для этого аспекта всей архитектуры, в то время как во всех остальных случаях простота преобладала над производительностью? Это может показаться особенно противоречивым набором архитектурных решений!-)
person
Alex Martelli
schedule
04.02.2010