Das Ausführen eines Android-Telefons als stabiler Webserver (für ein Python-CGI-Skript)

Ich bin neu für Android. Ich habe ein Python-Programm, das sowohl ein CGI-Skript als auch ein SMS-basiertes Interaktionssystem für eine kleine Datenbank ist. Es ist ein extrem niedriges Nachfrage-System (eine Handvoll von Benutzern), die von einer Basisorganisation betrieben wird. Aber es erfordert Stabilität, im Sinne von nicht zufälligen Abstürze oder Ausfallzeiten. Aus verschiedenen Gründen würde das Ausführen dieses auf einem Android-Telefon einige Probleme mit dem vorhandenen Setup lösen. Doch bevor ich eintauche, wollte ich über die Machbarkeit eines solchen Systems nachdenken. Es müsste:

  • Führen Sie einen Webserver aus, der CGI-Scripts (Vanilla CGI)
  • Reagiere auf SMS
  • Behandle eine SQlite-Datenbank
  • Tun Sie dies in Python (wie Portierung es auf Java ist nicht möglich durch zeitliche Einschränkungen)

Die Anbindung an Telefonbenutzer ist zu diesem Zeitpunkt nicht erforderlich.

Ich bin mir bewusst, dass die benötigten Stücke existieren – Web-Server mit CGI , SL4A , etc. Aber die Webserver scheinen meistens für den persönlichen Gebrauch gedacht und SL4A sagt klar, dass es " Alpha- Qualität Software" ist . Die verschiedenen Fragen zu SO, die sich auf SL4A beziehen, scheinen auch nicht viel von dieser Art von Anwendungsfall zu sagen. Sie konzentrieren sich auf die Anwendungsentwicklung für Handys (wie diese ).

Kurz gesagt, wäre solch ein System stabil? Angenommen, das Kernprogramm ist gesund, könnte ich mich darauf verlassen?

  • Java / Android - Fast ByteBuffer Parsing
  • Holen Sie Bilder vom PHP-Server auf Android
  • Vom lokalen xampp-Server zum Online-Server wechseln
  • Wie man einen Web-Service (vorzugsweise mit PHP), die angefordert werden können, um JSON-Objekte von der Android-App zu bekommen
  • Verwalten Sie Android-Gerät über Web-Browser von einem Laptop mit WiFI
  • Wie kann ich mein node.js Projekt auf Android?
  • Zugriff auf Webserver, der innerhalb von Eclipse von außerhalb der Workstation läuft
  • 4 Solutions collect form web for “Das Ausführen eines Android-Telefons als stabiler Webserver (für ein Python-CGI-Skript)”

    TLDR : CherryPy ist ein zuverlässiger Server, und Android kann zuverlässig genug sein, um Server an diesen Tagen zu bauen.


    Ich pflegte, ein Projekt zu pflegen, das CherryPy und SL4A verwendete, mit ws4py für Websockets.

    CherryPy 3.2.2 funktionierte perfekt auf Python 2.6 und Python 3.2.

    Die Anwendung wurde oft für einen Tag oder zwei ausgeführt. Es schien, als wäre es gut gewesen, wenn es länger lief, aber es wurde viel neu gestartet, als es entwickelt wurde.

    CherryPy war immer in Ordnung, aber Android-Geräte manchmal nur abstürzen, so SL4A wird von Zeit zu Zeit zu verlassen, und müssen neu gestartet werden. Dies kann kein Problem auf einem Gerät sein, das nur als Server verwendet wurde. Für mich war es immer stabil, wenn das Gerät über Nacht gelassen wurde, aber gelegentlich abstürzen würde, wenn ich das Gerät normal benutzte (es war mein aktuelles Telefon). All dies war auf einer Galaxy SII, zurück, wenn Android noch ziemlich buggy so war.

    Einrichten von CherryPy ist einfach. Es ist reine Python, also kannst du einfach eine Kopie auf deinen Weg legen und es importieren (du brauchst auch keinen Emulator).

    Sie können kämpfen, um das Gerät wach zu halten. Wenn es allein gelassen wird, wird es schlafen gehen. Sie können es sagen, dass es wach bleiben in den Entwickler-Optionen, aber ich bin ziemlich sicher, dass nur funktioniert, wenn das Gerät aufgeladen wird.

    UPDATE : Android ist heute viel stabiler, aber die Arbeit an dem SL4A-Projekt ist so ziemlich beendet. Es gibt ein Projekt namens QPython, das eine Kopie als Teil einer größeren App beibehält, also kann es noch leicht gemacht werden.

    Für das Ausführen von Python CGI Scripts in Android. Grundsätzlich brauchst du einen Webserver, der in der Lage ist, CGI-Scripts in Android-Plattformen auszuführen, aber ich habe keine gefunden. Sie müssen Spielzeug CGI Skript an die Cherrypy Web-Server passen und es könnte auf Android laufen.

    Sind Schritte hier:

    1. Das erste, was wir brauchen, ist, die SL4A (r4) Software im Android (2.3) Emulator herunterzuladen. Es kann von Ihrem Android-Browser getan werden, indem Sie auf die SL4A Website. Installiere jetzt die Software im Emulator.
    2. Dann installieren Sie Python für Android von der gleichen SL4A-Website. Es wird ein apk der Version r4 herunterladen.
    3. Starten Sie die SL4A-Anwendung und prüfen Sie, ob das HelloWorld-Python-Skript läuft. Es wird sicherstellen, dass Ihre Installation in Ordnung ist.
    4. Jetzt ist die Zeit, das Cherrypy-Bibliotheksmodul zu installieren. Es finden Sie unter http://www.cherrypy.org/wiki/CherryPyDownload . Ich habe 3.2.0 Version genommen. Laden Sie das Ei für python 2.6.
    5. Jetzt müssen wir die Ei-Datei auf Android Emulator übertragen. Verwenden Sie den Befehl adb push, um die Ei-Datei auf / mnt / sdcard / Download zu übertragen.
    6. Starten Sie Python für Android aus Emulator und klicken Sie auf Module importieren. Es wird die neu hochgeladene Ei-Datei auflisten. Wählen Sie es aus und installieren Sie es.
    7. Jetzt können wir ein Cherrypy-Skript schreiben, das als CGI ausgeführt werden soll. Unten ist ein HelloWorld-Beispiel aus Cherrypy Tutorial (modifiziert ein bisschen)
    # Import CherryPy global namespace import cherrypy class HelloWorld: """ Sample request handler class. """ def index(self, **params): # CherryPy will call this method for the root URI ("/") and send # its return value to the client. for key in params: print key, '=', params[key] return "Hello world!" # Expose the index method through the web. CherryPy will never # publish methods that don't have the exposed attribute set to True. index.exposed = True 
     # CherryPy always starts with app.root when trying to map request URIs # to objects, so we need to mount a request handler root. A request # to '/' will be mapped to HelloWorld().index(). cherrypy.config.update({'server.socket_host': '127.0.0.1'}) cherrypy.config.update({'server.socket_port': 8080}) cherrypy.quickstart(HelloWorld(), '/') 

    8> Das Skript muss in das Verzeichnis / mnt / sdcard / sl4a / scripts im Emulator übertragen werden. Dann kannst du SL4A starten und auf das Skript tippen. Debug-Ausgänge sind sichtbar, wenn Sie in der SL4A-Konsole laufen.

    9> Über den Android-Browser überprüfen Sie die URL http://localhost:8080/ . Es wird "Hallo Welt" sagen.

    Dies kann der Web-Server-Set, den wir python-Skripte platzieren können, um auf Android-Telefondaten und andere Sachen zuzugreifen, die den externen Clients ausgesetzt werden können.

    Credits zu: sehen Sie die Screenshots hier

    Andere Information:

    Micro-httpd (GET / POST / CGI-Unterstützung) Cross-Compiled auf Android

    Python-for-android

    Laufen "Hallo, Welt!" Als CGI-Skript

    Was ich empfehle:

    Ich schlage vor, für alle leichten Web-Server (wie node.js) in Himbeer-Pi zu gehen

    Ref:

    • Raspberrry pi python
    • Leichte Web-Server
    • Web Application Framework für Node.js

    Hier ist ein Link zu einem meiner Blog-Posts zu beschreiben, wie man Ihr Android-Handy in einem grundlegenden CGI Webserver mit Py4A / SL4A in etwa 10 Minuten http://matbaker.wordpress.com/2013/01/29/android-webserver- in 10 Minuten/

    Ihre Anwendung erfordert den Betrieb eines Servers, der konstante Verfügbarkeit, Konnektivität und uneingeschränkte Rechenleistung voraussetzt. Ein Mobiltelefon bietet keine davon.

    Mobiltelefone sind entworfen, um die Batterielebensdauer zu bewahren, indem sie die Verarbeitungs- und Leistungsanforderungen minimieren. Diese beiden Punkte sind direkt im Widerspruch zum Ausführen eines Servers.

    Aber es erfordert Stabilität, im Sinne von nicht zufälligen Abstürze oder Ausfallzeiten.

    Angenommen, Ihre Software ist richtig geschrieben, müssen Sie sich keine Sorgen um Abstürze machen, aber das Betriebssystem wird ständig versuchen, das System zu schlafen.

    • Führen Sie einen Webserver aus, der CGI-Scripts (Vanilla CGI)
    • Reagiere auf SMS
    • Behandle eine SQlite-Datenbank
    • Tun Sie dies in Python (wie Portierung es auf Java ist nicht möglich durch zeitliche Einschränkungen)

    Warum nicht einfach einen kleinen virtuellen Server benutzen? Sie können einfach einen Server für so wenig wie $ 5 pro Monat (zB DigitalOcean ) und verwenden Sie Twilio als SMS-Gateway (ein paar Cent pro SMS). Günstig, verfügbar, zuverlässig und hochverfügbar. Du bekommst ein vorinstalliertes Ubuntu-Bild, installierst ein paar Extrapakete da und verschwinde mit Python und SQLite. Und man muss sich überhaupt keine Sorgen um die mobile / SMS-Seite machen (Signalstärke, Netzwerkverfügbarkeit usw.). Alle diese Punkte oben würden durch diese Lösung erfüllt werden.

    Wenn du keinen Server extern betreiben willst (zB "in der Cloud"), dann könntest du einen alten PC benutzen und Linux installieren. Oder verwenden Sie sogar einen Plug-Computer und haben einen fast unsichtbaren Server. Es gibt so viele Hardware-Optionen, die besser als ein Handy sind.

    Aus verschiedenen Gründen würde das Ausführen dieses auf einem Android-Telefon einige Probleme mit dem vorhandenen Setup lösen.

    Wie? Was ist es mit Android, das macht es vorzuziehen? Wenn Sie sich auf das Laptop-Batterieproblem beziehen, würde das Telefon ein ähnliches (wenn nicht schlechtes) Schicksal erleiden.

    Kurz gesagt, wäre solch ein System stabil? Angenommen, das Kernprogramm ist gesund, könnte ich mich darauf verlassen?

    Sie werden wahrscheinlich das ganze Betriebssystem und die Hardware die ganze Zeit kämpfen. Ein Server will ständig laufen, ein Handy will so wenig wie möglich laufen. Der gesamte Stapel von Hardware und Software ist für die Energieerhaltung optimiert. Ein Mobiltelefon ist entworfen, um von einer Batterie mit intermittierendem Aufladen zu laufen, und seine thermischen Managementsysteme sind entworfen, um die CPU so selten wie möglich zu wecken. Wenn du versuchst, ein Handy als Server zu betreiben, wirst du die Hardware sehr schnell verschleißen. Sie sind einfach nicht entworfen, um 24/7 laufen zu lassen. Sie könnten ein solches System ausführen, und es würde wahrscheinlich für eine Weile arbeiten, aber ich erwarte, dass Sie die Hardware schon zu lange ersetzen müssten.

    Verwenden Sie die Hardware, die für die Ausführung eines Servers geeignet ist. Alte PCs sind so einfach, an diesen Tagen zu kommen, es sollte möglich sein, ein kostenlos zu bekommen, das wäre bis zu der Aufgabe.

    Auch ist CGI wirklich eine Voraussetzung? Du solltest wirklich auf WSGI schauen; Es ist viel effizienter. CherryPi ist ein schöner Python-Server und Flask ist definitiv einen Blick wert.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.