Fast-ish python/jython IPC?

Все, что я хочу сделать, это сделать некоторые вызовы RPC через сокеты. У меня есть сервер, который работает с jython 2.5. Мне нужно сделать некоторые вызовы с внешнего сервера, на котором запущен Django на CPython. Я бил головой о стену, получая любую форму IPC.

Список вещей, которые я пробовал:

  • Apache Thrift не имеет реальных релизов, а всего лишь моментальных снимков. Я хотел бы использовать что-то стабильное.
  • JSON-RPC интересен, и он должен иметь возможность запускать сокеты, но на практике большинство implementations работает только над HTTP. Накладные расходы HTTP - это именно то, чего я пытаюсь избежать.
  • Буферы протокола - это действительно только протокол сериализации. Из того, что я собираю, protobuf обеспечивает создание интерфейса для RPC, но это только интерфейс. Фактически запись всего кода подключения зависит от пользователя. Если я собираюсь застрять с помощью сокетов, я просто использую JSON для сериализации. Это проще и быстрее.
  • Pyro не работает должным образом с Jython в качестве сервера. Некоторая проблема с тайм-аутом сокета. Я отправил сообщение в список рассылки.
  • pysage Yay для передачи сообщений! Только для него требуется python 2.6 или модуль обработки (который имеет скомпилированные расширения). Jython - версия 2.5 и не разрешает скомпилированные расширения.
  • Candygram является интересной альтернативой pysage, но насколько я могу сказать, это не поддерживается. Я даже не пробовал это с Jython. Есть ли у вас опыт?
  • Twisted Perspective Broker Twisted не работает на Jython.

Я знаю, что с XML-RPC это было бы неплохо, что делает меня еще более капризным. Я хочу, чтобы избежать накладных расходов на HTTP, но в то же время я действительно не хочу спускаться и грязно с сокетами для реализации моего собственного протокола. Я сделаю это неправильно, если да.

Любые идеи? Я, вероятно, буду плакать около 20 минут, а затем просто использую XML-RPC.

Ответ 2

Вы считали Hessian? Из рекламного ролика:

Двойная веб-служба Hessian протокол позволяет использовать веб-службы не требуя большой структуры, и не изучая еще одного алфавит суп протоколов. Потому что является двоичным протоколом, это хорошо подходит для отправки двоичных данных без каких-либо протокол с вложениями.

У него есть клиент Python и сервер Java (и многое другое).

Обновление: Если вы мертвы против HTTP, почему бы просто не использовать SocketServer и pickle? Не нужно многого протокола, трудно ошибиться. Отправлять/получать маринованные строки с префиксами длины.

Ответ 3

Два, которые выглядят наиболее интересными для меня:

  • Gearman и Связывание с Python. Это стало совсем немного быстрее, когда он был переписан в C (первоначально perl). Он используется в производстве (хотя я не могу указать на какие-либо примеры привязок python, используемых в производстве). Он имеет очень интересные (мне) интерфейсы в MySQL и Postgresql. Наконец, текущий твит от Django Jacob Kaplan-Moss.

  • RabbitMQ, хотя, поскольку это просто очередь сообщений, вам все равно придется сериализовать свои собственные сообщения, если вы также не используете celery.

Ответ 4

Мой любимый.. zeroc ice

Ответ 5

Вы думали об использовании CORBA? Он быстрый, портативный и объектно-ориентированный...

Я использовал его только на стороне Java (я думаю, вы могли бы использовать чистого java-брокера без проблем с Jython), а с IIOP вы должны иметь возможность взаимодействовать с клиентом CPython.