Remote Procedure Calls (RPC) mit Python back to frontpage

Ich habe gestern auf bitbucket ein kleines Projekt veröffentlicht, das im Rahmen einer anderen Entwicklung abgefallen ist: fspyrpc.

Es bietet eine simple aber effiziente Möglichkeit, RPC in Python durchzuführen.

Zur Übertragung verwende ich persistente TCP-Verbindungen (im Gegensatz zum Beispiel zum built-in XML-RPC-Package, das für jede Anfrage eine neue TCP-Verbindung aufbauen muss).

Anfragen und Antworten werden intern mit cPickle serialisiert und mittels einem eigenen einfachen Message-Format verpackt. cPickle weist eine gute Geschwindigkeit auf, besitzt jedoch den eklatanten Nachteil, dass es nur in einer vertrauenswürdigen Umgebung eingesetzt werden sollte. Manipulierte Nachrichten könnten sonst dazu führen, dass Schadcode durch cPickle auf dem jeweiligen Rechner ausgeführt wird. fspyrpc sollte daher nur dann eingesetzt werden, wenn Client und Server vertrauenswürdig sind. Für eine offene, anonyme Schnittstelle eignet es sich daher nicht. Für diesen Einsatzweck sollte cPickle beispielsweise durch JSON oder eine andere sichere Serialisation ersetzt werden.

Die gesamte Kommunikation wird mit zlib komprimiert.

Ich habe fspyrpc eine README verpasst, die die Nutzung grob erläutert. Das Paket kann aus dem Python Package Index installiert werden: pip install fspyrpc (es installiert das Package pyrpc)

Insgesamt ist meine RPC-Version schneller als die vorhandene XML-RPC-Variante, aber hat natürlich noch potential nach oben. Mir ging es prinzipiell darum, einen guten Ausgleich zwischen Usability und Geschwindigkeit zu schaffen. Vielleicht findet es der ein oder andere interessant.


New comment

Comments are moderated and therefore are not published instantly.





Comments

No comments yet. Be the first! :-)