我是Android新手。我有一个Python程序既是CGI脚本,也是基于SMS的小型数据库交互系统。这是一个由基层组织运营的极低需求系统(少数用户)。但它需要稳定性,即没有随机崩溃或停机时间。由于各种原因,在Android手机上运行此功能可以解决现有设置的一些问题。但是,在我深入研究之前,我想检查一下这种系统的可行性。它必须:
现阶段不需要与手机用户接口。
我知道所需的部分存在 - web servers with CGI,SL4A等。但网络服务器似乎主要供个人使用,SL4A明确指出"is alpha quality software"。各种questions on SO relating to SL4A似乎也没有对这种用例说多少。他们专注于手机的应用程序开发(例如this one)。
简而言之,这样的系统会稳定吗?假设核心程序是健全的,我可以依赖它吗?
答案 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上运行。
步骤在哪里:
# 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手机数据和其他可以暴露给外部客户端的东西。
其他信息:
micro-httpd (GET / POST / CGI support) cross-compiled to 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绝对值得一看。