szybki python / Jython IPC?

Wszystko, co chcę zrobić, to wykonać kilka połączeń RPC przez gniazda. Mam serwer, który robi backendowe rzeczy z systemem jython 2.5. Muszę wykonać kilka połączeń z serwera frontendowego z Django na Cpythonie. Biłem głową o ścianę, żeby zrobić wszystko, co w mojej mocy.

Lista rzeczy, które próbowałem:

  • Apache Thrift nie ma żadnych rzeczywistych wydań, tylko migawki. Chciałbym użyć czegoś stabilnego.
  • JSON-RPC jest ciekawe i powinno być w stanie uruchamiać się przez sockety, ale w praktyce większość implementacji wydaje się działać tylko przez HTTP. Http overhead jest dokładnie tym, czego staram się uniknąć.
  • bufory protokołu to tak naprawdę tylko protokół serializacji. Z tego co wiem protobuf zapewnia generowanie interfejsu dla RPC, ale to tylko interfejs. W rzeczywistości pisanie całego kodu połączenia zależy od użytkownika. Jeśli mam utknąć używając socketów, użyję JSON ' a do serializacja. Jest prostszy i szybszy .
  • Pyro nie działa poprawnie z Jythonem jako serwerem. Jakiś problem z czasem gniazdka. Wysłałem wiadomość na listę mailingową.
  • pysage Yay for message passing! Wymaga tylko Pythona 2.6 lub modułu przetwarzania (który ma skompilowane rozszerzenia). Jython jest wersją 2.5 i nie pozwala na skompilowane rozszerzenia.
  • Candygram jest ciekawą alternatywą dla pysage, ale o ile mogę powiedz, że nie ma konserwacji. Nawet nie próbowałem z Jythonem. Jakieś doświadczenia z tym?
  • Twisted Perspective Broker Twisted nie działa na Jythonie.

Wiem, że zrobienie tego z XML-RPC byłoby bardzo proste, co czyni mnie jeszcze bardziej marudnym. Chcę uniknąć narzutu HTTP, ale jednocześnie naprawdę nie chcę pobrudzić się gniazdami, aby zaimplementować własny protokół. Zrobię to źle, jeśli to zrobię.

Jakieś pomysły? Pewnie będę płakać za około 20 minut, a następnie wystarczy użyć XML-RPC.

Author: Ken Y-N, 2009-07-22

5 answers

A co powiesz na używanie gniazd, ale z pomocą asyncore i asynchat?

Niektóre linki:

 5
Author: codeape,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 08:56:45

Czy rozważałeś Hesji ? Z blurb:

The hesian binary web service protokół czyni usługi sieciowe użytecznymi bez konieczności stosowania dużych RAM, i bez uczenia się jeszcze jednego alfabetowa zupa protokołów. Ponieważ to jest protokołem binarnym, jest dobrze nadaje się do przesyłania danych binarnych bez konieczności przedłużania protokół z załącznikami.

Posiada klienta Pythona i serwer Javy (i nie tylko).

Aktualizacja: Jeśli jesteś martwy na HTTP, dlaczego po prostu nie użyć SocketServer i pickle? Protokół nie jest potrzebny, trudno się pomylić. Wysyłanie / odbieranie marynowanych łańcuchów z prefiksami długości.

 6
Author: Vinay Sajip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-23 01:21:02

Dwa, które wyglądają dla mnie najciekawiej:

  • Gearman i wiązania Python. Jest nieco szybszy teraz, gdy został ponownie napisany w C (pierwotnie perl). Jest używany w produkcji (choć nie mogę wskazać na żadne przykłady wiązań Pythona używanych w produkcji). Ma bardzo ciekawe (jak dla mnie) interfejsy do MySQL i Postgresql. Na koniec, todays tweet {[6] } z Django ' s Jacob Kaplan-Moss.

  • RabbitMQ chociaż ponieważ jest to tylko Kolejka wiadomości, nadal będziesz musiał serializować własne wiadomości, chyba że użyjesz również selery .

 2
Author: Van Gale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 09:57:04

Moje ulubione.. zeroc ' s ice

 2
Author: bfrog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 14:14:53

Myślałeś o użyciu Corby? Jest szybki, przenośny i zorientowany obiektowo...

Używałem go tylko po stronie Javy (myślę, że można użyć czystego brokera Javy bez żadnych problemów z Jython), a z IIOP powinieneś być w stanie współpracować z Klientem CPython.

 0
Author: fortran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 08:27:26