2013-06-26 3 views
6

Kurzversion:Bündelung Python "Back End" Code in einer phonegap App

Gibt es eine Standardmethode Python zu bündeln "Back-End-Server" Typencode in einer phonegap Client-Anwendung?

Lange Version:

Ich habe eine Reihe von Anwendungen, die ich Portierung auf phonegap berücksichtigen. Im Allgemeinen sind die Apps in Python geschrieben. Einige von ihnen haben Web-Frontends, einige davon sind eigenständige Python-Apps mit auf wxpython basierenden Schnittstellen.

Also jede Anwendung hat einige clientseitige Sachen, die bereits in html + javascript + css, oder die ich gerne in html + javascript + css übersetzen.

Für die Server-Seite ist es für einige der Anwendungen in Ordnung, den Server-Code auf einem Server zu belassen. Aber für einige/die meisten möchte ich die serverseitige Logik in die phonegap-App einpacken, so dass es eine eigenständige App sein kann. Diese Anforderung kommt von zwei Bedürfnissen. Eine davon ist, dass viele dieser Apps für die Notfallreaktion verwendet werden und auch dann funktionieren müssen, wenn Mobilfunkmasten und andere Netzwerkinfrastrukturen nicht verfügbar sind. Der andere ist einfach, dass einige der Apps recht einfach sind und keine Client/Server-Architektur garantieren - sie haben einfach eine Menge Code vom Typ "Backend-Logik", der in Python geschrieben wurde.

Jetzt weiß ich, dass ich all diese Back-End-Python-Logik nur in Javascript portieren konnte, aber ich hoffte, eine Lösung zu finden, wo diese beträchtliche Codebasis in Python bleiben konnte.

Meine Idee ist, dass ich ein Phonegap-Plugin schreiben könnte, das tatsächlich den vollständigen Python-Interpreter enthält (zumindest vollständig genug, um die meisten Dinge in meiner Codebasis zu verarbeiten). (Sowohl iOS als auch Android erlauben nativen C-Code. Daher sollte ich in der Lage sein, Python - oder zumindest einen Großteil davon - aus der Quelle zu kompilieren oder einfach mit iOS- und Android-Python-Bibliotheken zu verknüpfen, die andere erstellt haben.)

Also in der Javascript-Code, könnte ich den Client eine Funktion wie "InvokeBackEndMethod()" aufrufen lassen. Dies würde sich ähnlich wie ein Ajax-Aufruf verhalten, aber anstatt das Netzwerk aufzurufen, würde es die Abfrage/URL/Nachricht an das Python-Plugin senden. Nach meinem Verständnis können Phonegap-Plugins den persistenten Status beibehalten (z. B. können Sie mit einem Datenbank-Plug-in einen Aufruf zum Öffnen der Datenbank und nachfolgende Aufrufe ausführen, um daraus zu lesen und sie zu schließen). Der Python- "Server" -Code könnte also seinen Zustand genauso beibehalten wie auf dem echten Server. Tatsächlich läuft im Python-Code ein Web-Framework wie cherrypy, also wäre es wirklich so, als würde man sowohl den Client als auch den Server in derselben mobilen App ausführen.

Meine Fragen sind:

(1) Ist sinnvoll, dass Plan klingen?

(2) Hat jemand dieses Problem bereits gelöst? Ich hatte gehofft, ein Projekt namens "phonegap server" zu finden, und es wäre im Wesentlichen eine "universelle" PhoneGap-Erweiterung, in dem Sinne, dass es willkürliche Anrufe vom Client nehmen würde, und diese Anrufe nach Ihrer Wahl versenden würde verschiedene Mechanismen: Python, Java, Mono usw. (dh, diese universelle Phonegap-Erweiterung würde durch verschiedene Sprach- "Plugins" "erweitert" werden und dann würden diese Plugins wiederum durch jede Geschäftslogik, die der Benutzer in dem gegebenen hinzufügte, "erweitert" werden Sprache). Es kann sein, dass ein solches Projekt von den meisten Leuten nicht benötigt wird, weil sie keine Anforderung haben, getrennt zu arbeiten und/oder keine große Code-Basis von "Backend" -Logik haben, die sie bereitstellen möchten in einer eigenständigen App, aber in der Originalsprache belassen. Aber es scheint, dass manche Leute das brauchen müssen, oder?

+0

Nein, die PhoneGap-App soll nur clientseitig sein. Aber Sie könnten Logik in den Java/Python-Code schreiben, der Ihren PhoneGap-Code umschließt. –

+0

@limelights: Richtig, meine Erweiterungsidee setzt den Java/Python-Code im Wesentlichen in den Wrapper (d. H. Den Teil von phonegap, der außerhalb des eingebetteten Browsers liegt). Meine Frage ist, ob jemand dafür bereits einen Rahmen geschaffen hat. –

Antwort

1

Zwei sehr unterschiedliche Initiativen sollten Sie auschecken: http://omz-software.com/pythonista/ Ermöglicht den Export zu einem Xcode-Projekt.

Und http://code.google.com/p/brython/ Verwenden Sie Python anstelle von Javascript für HTML5-Entwicklung.

+0

Danke. Pythonista ist zu viel von einem "Paket" und nur für iOS, aber Brython sieht ziemlich interessant aus. Ich schaue mir an, wie gut es funktioniert ... –

+0

Nun, ich habe versucht, brython, und auch Pyjaco und py2js/Pyjamas. In allen Fällen fand ich sie "nicht bereit für die Primetime". Py2js ist ziemlich ausgereift, aber es unterstützt nicht die gesamte Python-Syntax, die in meinem Code verwendet wird (das ist praktikabel, weil ich den Code allgemein modifizieren kann, um das zu entfernen, was er nicht unterstützt). Aber der Mörder ist, dass es mit allen von ihnen sehr schwierig ist, deine Käfer aufzuspüren. Sie geben minimale Fehlerberichte und es ist schwer, Breakpoints in Ihrem kompilierten JavaScript-Code zu setzen, da es dynamisch injiziert wird (zumindest weiß ich nicht, wie man Breakpoints in einem solchen Code setzt). –

Verwandte Themen