将Android手机作为稳定的Web服务器运行(对于Python CGI脚本)

将Android手机作为稳定的Web服务器运行(对于Python CGI脚本),android,python,webserver,cgi,sl4a,Android,Python,Webserver,Cgi,Sl4a,我不熟悉安卓系统。我有一个Python程序,它既是一个CGI脚本,也是一个用于小型数据库的基于SMS的交互系统。这是一个由基层组织运行的需求极低的系统(少数用户)。但它需要稳定性,即没有随机崩溃或停机时间。出于各种原因,在Android手机上运行此功能可以解决现有设置中的一些问题。然而,在我开始之前,我想检查一下这样一个系统的可行性。它必须: 运行可以执行CGI脚本的web服务器(普通CGI) 响应SMS 处理SQlite数据库 在Python中这样做(由于时间限制,将其移植到Java是不可行

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

  • 运行可以执行CGI脚本的web服务器(普通CGI)
  • 响应SMS
  • 处理SQlite数据库
  • 在Python中这样做(由于时间限制,将其移植到Java是不可行的)
在此阶段不需要与电话用户进行接口

我知道需要的部分是存在的,等等。但是Web服务器似乎主要是供个人使用的,SL4A清楚地说明了这一点。各种各样的例子似乎也没有对这种用例说太多。他们专注于手机的应用程序开发(如手机)


简言之,这样一个系统是否稳定?假设核心程序是可靠的,我可以依赖它吗

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

以下是步骤:

  • 我们首先需要下载SL4A(r4)软件 Android(2.3)模拟器。它可以通过以下方式在Android浏览器中完成: 前往SL4A站点。现在在emulator中安装软件
  • 然后从同一SL4A站点安装Python for Android。它会 下载r4版的apk
  • 启动SL4A应用程序并检查HelloWorld python脚本是否正确 跑步它将确保您的安装是良好的
  • 现在是安装Cherrypy库模块的时候了。可以找到 在我学了3.2.0 版本下载Python2.6的egg
  • 现在我们需要将egg文件传输到Android emulator。使用亚洲开发银行 按下命令将egg文件传输到/mnt/sdcard/Download
  • 从emulator启动Python for Android并单击导入模块。 它将列出新上传的egg文件。选择它并安装
  • 现在我们可以编写一个Cherrypy脚本作为CGI运行。下面是一个例子 HelloWorld示例取自Cherrypy教程(稍作修改)
  • 8> 脚本需要传输到emulator中的/mnt/sdcard/sl4a/scripts目录。然后您可以启动SL4A并点击脚本以运行。如果在SL4A控制台中运行,则调试输出可见

    9> 在Android浏览器中,检查URL
    http://localhost:8080/
    。它会说“你好,世界”

    这是一个web服务器集,我们可以放置python脚本来访问Android手机数据和其他可以向外部客户端公开的内容

    归功于:

    其他信息:

    我的建议:

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

    Ref:


    这里是我的一篇博客文章的链接,介绍了如何在10分钟内使用Py4A/SL4A将您的android手机切换到基本的CGI网络服务器上

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


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

    Cherrypy3.2.2在Python2.6和Python3.2上工作得非常好

    应用程序通常运行一两天。如果它运行的时间更长的话,它看起来会很好,但是在开发过程中,它被重新启动了很多次

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

    设置CherryPy很容易。它是纯Python的,所以您可以将一个副本放到路径的某个位置并导入它(您也不需要模拟器)

    您可能很难让设备保持清醒。如果让它一个人呆着,它就会睡着。您可以在开发者选项中告诉它保持清醒,但我非常确定,只有在设备正在充电的情况下,它才能工作


    更新:Android现在稳定多了,但SL4A项目的工作已经基本结束。有一个名为QPython的项目将SL4A作为一个更大应用程序的一部分进行维护,因此这项工作仍然可以完成。

    您的应用程序需要运行一台服务器,它假定具有恒定的可用性、连接性和不受限制的处理能力。手机不提供这些功能

    移动电话的设计目的是通过最小化处理和电源需求来节省电池寿命。这两点与运行服务器有直接的矛盾

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

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

    • 运行可以执行CGI脚本的web服务器(普通CGI)
    • 响应SMS
    • 处理SQlite数据库
    • 在Python中这样做(由于时间限制,将其移植到Java是不可行的)
    为什么不使用小型虚拟服务器呢?您可以轻松地以每月5美元的价格购买一台服务器,并将其用作服务器
     # 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(), '/')