быстрая прошивка Python / Jython IPC? - PullRequest
14 голосов
/ 22 июля 2009

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

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

  • Apache Thrift не имеет реальных выпусков, только снимки. Я хотел бы использовать что-то стабильное.
  • JSON-RPC интересен, и он должен быть способен работать через сокеты, но на практике большинство реализаций работают только по 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.

Ответы [ 5 ]

6 голосов
/ 22 июля 2009

Вы рассматривали Гессиан ? Из объявления:

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

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

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

5 голосов
/ 22 июля 2009

Как насчет использования сокетов, но с помощью asyncore и asynchat?

Некоторые ссылки:

2 голосов
/ 22 июля 2009

Мой любимый .. Лед Зерока

2 голосов
/ 22 июля 2009

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

  • Механизм и Привязки Python . Это немного быстрее, теперь, когда он был переписан на C (изначально perl). Он используется в производстве (хотя я не могу указать на какие-либо примеры привязок Python, используемых в производстве). У него очень интересные (для меня) интерфейсы в MySQL и Postgresql. Наконец, сегодняшний твит от Джанго Джекоб Каплан-Мосс.

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

0 голосов
/ 22 июля 2009

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

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

...