2009-07-22 5 views
14

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

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

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

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

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

+0

Кстати, я только что нашел это решение на мой вопрос: http://bert-rpc.org/ – Kobold

ответ

6

Считаете ли вы, что Hessian? Из аннотации:

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

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

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

+0

Hessian использует HTTP, который я хотел бы избежать. – Kobold

0

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

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

+0

Это может очень хорошо прийти к этому. Прямо сейчас наш интерфейс развивается довольно быстро, и CORBA кажется слишком тяжелым. Но да, мысль пришла мне в голову. – Kobold

+0

Я не думаю, что его слишком тяжелый вес, в смысле производительности или объема памяти, он также используется в встроенных системах ... если вы имеете в виду, что это может быть слишком громоздким для развертывания всех сервисов, которые он может предоставить, и вы не будете вероятно используйте, да, тогда вы очень правы^_^ – fortran

2

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

  • Gearman и Python bindings. Сейчас уже немного быстрее, потому что он был переписан на C (первоначально perl). Он используется в производстве (хотя я не могу указать на какие-либо примеры привязок python, используемых в производстве). Он имеет очень интересные (мне) интерфейсы в MySQL и Postgresql. Наконец, todays tweet из Джейкоба Каплана-Мосса из Django.

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

+0

В настоящее время мы используем морковь/RabbitMQ для асинхронного вызова этого сервера, но теперь мы хотим сделать синхронные вызовы. Я уверен, что смогу построить это над очередью, но не ясно, как это сделать в хорошем смысле. – Kobold

2

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

+0

Лед действительно очень интересный. Мы не открытый проект, поэтому я рассмотрю, сколько это стоит для коммерческой лицензии. – Kobold