5

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

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

在此阶段不需要与电话用户交互。

我知道需要的部分是存在的——带有 CGISL4A等的网络服务器。但这些网络服务器似乎主要是供个人使用的,SL4A 明确指出它“是alpha质量软件”与 SL4A 相关的 SO 上的各种问题似乎也没有对这种用例说明太多。他们专注于手机应用程序开发(例如这个)。

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

4

4 回答 4

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 维护为更大应用程序的一部分,所以这些东西仍然可以完成。

于 2013-09-23T01:58:21.273 回答
3

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

步骤在这里:

  1. 我们需要的第一件事是在 Android (2.3) 模拟器中下载 SL4A (r4) 软件。它可以通过您的 Android 浏览器访问 SL4A 站点来完成。现在在模拟器中安装软件。
  2. 然后从同一个 SL4A 站点安装适用于 Android 的 Python。它将下载版本 r4 的 apk。
  3. 启动 SL4A 应用程序并检查 HelloWorld python 脚本是否正在运行。它将确保您的安装正常。
  4. 现在是安装 Cherrypy 库模块的时候了。它可以在http://www.cherrypy.org/wiki/CherryPyDownload找到。我已经拿了 3.2.0 版本。下载适用于 python 2.6 的 egg。
  5. 现在我们需要将 egg 文件传输到 Android 模拟器。使用 adb push 命令将 egg 文件传输到 /mnt/sdcard/Download。
  6. 从模拟器启动 Python for Android,然后单击 Import modules。它将列出新上传的 egg 文件。选择它并安装。
  7. 现在我们可以编写一个 Cherrypy 脚本作为 CGI 运行。下面是取自 Cherrypy 教程的 HelloWorld 示例(稍作修改)
 # 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 浏览器中,检查 URL http://localhost:8080/。它会说“你好世界”。

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

致谢: 在此处查看屏幕截图

其他信息:

micro-httpd (GET / POST / CGI support) 交叉编译到Android

python-for-android

运行“你好,世界!” 作为 CGI 脚本

我推荐的:

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

参考:

于 2013-09-18T10:47:13.710 回答
1

这是我的一篇博客文章的链接,该文章描述了如何在大约 10 分钟内使用 Py4A / SL4A 将您的 android 手机转换为基本的 CGI 网络服务器http://matbaker.wordpress.com/2013/01/29/android-webserver- 10 分钟内/

于 2013-09-21T07:38:41.110 回答
0

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

移动电话旨在通过最大限度地减少处理和电源需求来延长电池寿命。这两点与运行服务器直接不一致。

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

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

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

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

如果您不想在外部操作服务器(即“在云中”),那么您可以使用旧 PC 并安装 Linux。或者甚至使用插入式计算机并拥有几乎看不见的服务器。比手机更适合的硬件选择太多了。

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

如何?是什么让 Android 更受欢迎?如果您指的是笔记本电脑电池问题,那么手机将遭受类似(如果不是更糟)的命运。

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

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

使用适合运行服务器任务的硬件。如今,旧电脑很容易买到,应该可以免费获得一台可以胜任这项任务的电脑。

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

于 2013-09-24T13:07:11.377 回答