将Android手机作为稳定的Web服务器运行(对于Python CGI脚本)
我不熟悉安卓系统。我有一个Python程序,它既是一个CGI脚本,也是一个用于小型数据库的基于SMS的交互系统。这是一个由基层组织运行的需求极低的系统(少数用户)。但它需要稳定性,即没有随机崩溃或停机时间。出于各种原因,在Android手机上运行此功能可以解决现有设置中的一些问题。然而,在我开始之前,我想检查一下这样一个系统的可行性。它必须:将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是不可行
- 运行可以执行CGI脚本的web服务器(普通CGI)
- 响应SMS
- 处理SQlite数据库
- 在Python中这样做(由于时间限制,将其移植到Java是不可行的)
简言之,这样一个系统是否稳定?假设核心程序是可靠的,我可以依赖它吗 用于在Android中运行Python CGI脚本。基本上,你需要一个能够在Android平台上运行CGI脚本的web服务器,但我找不到。您需要玩具CGI脚本来适应Cherrypy web服务器,它可以在Android上运行 以下是步骤:
http://localhost:8080/
。它会说“你好,世界”
这是一个web服务器集,我们可以放置python脚本来访问Android手机数据和其他可以向外部客户端公开的内容
归功于:
其他信息:
我的建议:
我建议使用raspberry pi中的任何轻量级web服务器(如node.js)
Ref:
我曾经维护过一个使用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是不可行的)
# 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(), '/')