将Android手机作为稳定的网络服务器运行(适用于Python CGI脚本)

时间:2013-09-15 05:30:17

标签: android python webserver cgi sl4a

我是Android新手。我有一个Python程序既是CGI脚本,也是基于SMS的小型数据库交互系统。这是一个由基层组织运营的极低需求系统(少数用户)。但它需要稳定性,即没有随机崩溃或停机时间。由于各种原因,在Android手机上运行此功能可以解决现有设置的一些问题。但是,在我深入研究之前,我想检查一下这种系统的可行性。它必须:

  • 运行可以执行CGI脚本(vanilla CGI)的Web服务器
  • 回复短信
  • 处理SQlite数据库
  • 在Python中这样做(由于时间限制,将其移植到Java是不可行的)

现阶段不需要与手机用户接口。

我知道所需的部分存在 - web servers with CGISL4A等。但网络服务器似乎主要供个人使用,SL4A明确指出"is alpha quality software"。各种questions on SO relating to SL4A似乎也没有对这种用例说多少。他们专注于手机的应用程序开发(例如this one)。

简而言之,这样的系统会稳定吗?假设核心程序是健全的,我可以依赖它吗?

4 个答案:

答案 0 :(得分:8)

TLDR :CherryPy是一个可靠的服务器,Android在这些日子里可能足够可靠地构建服务器。


我曾经维护过一个使用CherryPy和SL4A的项目(ws4py用于websockets)。

CherryPy 3.2.2在Python 2.6和Python 3.2上完美运行。

该应用程序经常运行一两天。如果它运行得更长,它似乎会很好,但它在开发过程中重新启动了很多。

CherryPy一直很好,但Android设备有时会崩溃,因此SL4A会不时退出,需要重新启动。对于仅用作服务器的设备,这可能不是问题。对我来说,当设备一夜之间运行时它总是稳定的,但是当我正常使用设备时它会偶尔崩溃(这是我的实际手机)。所有这一切都发生在Galaxy SII上,当时Android仍然像那样的马车。

设置CherryPy很简单。它是纯Python,因此您可以将副本放到某个地方的路径上并导入它(您也不需要模拟器)。

您可能很难让设备保持清醒状态。如果它被单独留下,它将进入睡眠状态。您可以告诉它在开发人员选项中保持清醒,但我很确定只有在设备正在充电时才有效。

更新:Android现在更加稳定,但SL4A项目的工作已基本结束。有一个名为QPython的项目将SL4A维护为更大的应用程序的一部分,所以这些东西仍然可以完成。

答案 1 :(得分:2)

用于在Android中运行Python CGI脚本。基本上你需要一个能够在Android平台上运行CGI脚本的Web服务器,但我找不到。您需要玩具CGI脚本以适应 Cherrypy Web服务器,它可以在Android上运行。

步骤在哪里:

  1. 我们首先需要的是下载SL4A(r4)软件 Android(2.3)模拟器。它可以通过Android浏览器完成 去SL4A网站。现在在模拟器中安装软件。
  2. 然后从同一个SL4A站点安装Python for Android。它会 下载r4的apk。
  3. 启动SL4A应用程序并检查HelloWorld python脚本是否正确 运行。它将确保您的安装正常。
  4. 现在是安装Cherrypy库模块的时候了。它可以找到 在http://www.cherrypy.org/wiki/CherryPyDownload。我服用了3.2.0 版。下载egg for python 2.6。
  5. 现在我们需要将egg文件传输到Android模拟器。使用adb push命令将egg文件传输到/ mnt / sdcard / Download。
  6. 从模拟器启动Python for Android,然后单击导入模块。 它将列出新上传的egg文件。选择并安装。
  7. 现在我们可以编写一个Cherrypy脚本作为CGI运行。下面是一个 取自Cherrypy教程的HelloWorld示例(稍作修改)
  8.  # 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是氢。该脚本需要传输到模拟器中的/ mnt / sdcard / sl4a / scripts目录。然后,您可以启动SL4A并点击要运行的脚本。如果在SL4A控制台中运行,则可以看到调试输出。

    9基在Android浏览器中,检查网址http://localhost:8080/。它会说“Hello world”。

    这个Web服务器集我们可以放置python脚本来访问Android手机数据和其他可以暴露给外部客户端的东西。

    致信: see the screen shots here

    其他信息:

    micro-httpd (GET / POST / CGI support) cross-compiled to Android

    python-for-android

    Running "Hello, world!" as a CGI Script

    我的建议:

    我建议在raspberry pi中使用任何轻量级Web服务器(如node.js)

    参考:

答案 2 :(得分:1)

这是我的一篇博客帖子的链接,描述了如何在大约10分钟内使用Py4A / SL4A在基本的CGI网络服务器中打开你的Android手机http://matbaker.wordpress.com/2013/01/29/android-webserver-in-10-minutes/

答案 3 :(得分:0)

您的应用程序需要运行服务器,该服务器假定持续可用性,连接性和不受限制的处理能力。手机不能提供这些功能。

移动电话旨在通过最小化处理和电力需求来延长电池寿命。这两点与运行服务器直接相关。

  

但它需要稳定性,即没有随机崩溃或停机时间。

假设您的软件写得正确,您可能不必担心崩溃,但操作系统会不断尝试让系统进入睡眠状态。

  
      
  • 运行可以执行CGI脚本(vanilla CGI)的Web服务器
  •   
  • 回复短信
  •   
  • 处理SQlite数据库
  •   
  • 在Python中这样做(由于时间限制,将其移植到Java是不可行的)
  •   

为什么不使用小型虚拟服务器?您可以轻松购买服务器,每月只需5美元(例如DigitalOcean),并使用Twilio作为短信网关(每条短信几美分)。便宜,可用,可靠,高度可用。你得到一个预装的Ubuntu映像,在那里安装一些额外的软件包,然后你就可以使用Python和SQLite了。而且你不必担心移动/短信方面(信号强度,网络可用性等)。这个解决方案将满足上述所有这些要点。

如果您不想在外部操作服务器(即“在云端”),那么您可以使用旧PC并安装Linux。甚至使用plug computer并拥有一个几乎不可见的服务器。有许多硬件选项比手机更适合。

  

由于各种原因,在Android手机上运行此功能可以解决现有设置的一些问题。

如何?什么是Android更适合?如果你指的是笔记本电脑电池问题,手机会遭遇类似(如果不是更糟)的命运。

  

简而言之,这样的系统会稳定吗?假设核心程序是健全的,我可以依赖它吗?

你可能会一直在与操作系统和硬件作斗争。服务器希望不断运行,手机希望尽可能少地运行。整个硬件和软件堆栈都针对节能进行了优化。移动设备设计为使用间歇充电的电池运行,其热管理系统旨在尽可能不频繁地唤醒CPU。如果您尝试将移动设备作为服务器运行,则可能会很快耗尽硬件。它们根本不是为了全天候运行而设计的。你可以运行这样一个系统,它可能会工作一段时间,但我希望你不得不在不久之前更换硬件。

使用适合运行服务器任务的硬件。现在很容易找到旧电脑,应该可以免费获得一台可以完成任务的电脑。

另外,CGI真的是一个要求吗?你应该看看WSGI;效率更高。 CherryPi是一个不错的Python服务器,Flask绝对值得一看。