在PhoneGap应用中捆绑Python“后端”代码

7

简短版:

是否有一种标准的方法可以将Python“后端服务器”类型的代码与phonegap客户端应用程序捆绑在一起?

详细版:

我有许多应用程序正在考虑移植到phonegap平台。通常,这些应用程序都是使用Python编写的。其中一些拥有Web前端,另一些则是基于WXPython的独立Python应用程序。

因此,每个应用程序都有一些客户端内容,这些内容已经是HTML+JavaScript+CSS,或者我愿意将它们转换为HTML+JavaScript+CSS。

对于服务器端,对于其中一些应用程序,将服务器代码留在服务器上是可以的。但对于某些/大多数应用程序,我希望将服务器端逻辑打包到phonegap应用程序中,以便它可以成为一个独立的应用程序。这个需求来自两个方面的需要。一个是许多这些应用程序被用于紧急响应,并且需要在没有蜂窝塔和其他网络基础设施的情况下工作。另一个是一些应用程序非常简单,并且不需要客户端/服务器架构 - 它们只是碰巧使用了Python编写的大量“后端逻辑”类型代码。

现在,我知道我可以将所有这些后端Python逻辑移植到JavaScript中,但是我希望找到一个解决方案,使得这个庞大的代码库仍然可以保留在Python中。

我的想法是,我可以编写一个phonegap插件,它实际上包含完整的Python解释器(至少足以处理我的代码库中的大部分内容)。 (也就是说,iOS和Android都允许本地C代码,因此我应该能够从源代码编译Python - 或者至少是大部分Python代码 - 或者只是链接到其他人已经构建的iOS和Android Python库。)

因此,在JavaScript代码中,我可以让客户端调用类似于“InvokeBackEndMethod()”这样的函数。这将类似于ajax调用,但是不是调用网络,而是将查询/ URL /消息发送到Python插件。我了解到,phonegap插件可以维护持久状态(例如,数据库插件让您可以进行一次调用来打开数据库,并进行后续调用以从中读取数据并关闭它)。因此,Python“服务器”代码可以像在真实服务器上一样维护其状态。实际上,Python代码可能正在运行像cherrpy这样的Web框架,因此它将真正地像在同一个移动应用程序中运行客户端和服务器。

我的问题是:

(1)这个计划听起来合理吗?

(2)有没有人已经解决了这个问题?我希望能找到一个名为“phonegap server”的项目,它本质上是一个“通用”的PhoneGap扩展,它可以接受来自客户端的任意调用,并将这些调用分派到您选择的各种机制:Python、Java、mono等(即,这个通用的phonegap扩展会被各种语言“插件”所扩展,然后这些插件又会被用户在给定语言中添加的任何业务逻辑所扩展)。也许大多数人不需要这样的项目,因为他们没有离线运行的要求,或者他们没有一个巨大的“后端”逻辑代码库,他们想在独立的应用程序中部署它,但是保留原始语言。但是似乎一些人必须需要这样做,不是吗?

不,PhoneGap应用程序只能作为客户端代码。但是,你可以在包装PhoneGap代码的Java/Python代码中编写逻辑。 - Henrik Andersson
@limelights:没错,我的扩展想法基本上是将Java/Python代码放在包装器中(即PhoneGap的嵌入式浏览器之外的部分)。我的问题是是否有人已经为此设置了框架。 - M Katz
1个回答

2

谢谢。Pythonista太过于“封闭”,而且只适用于iOS,但Brython看起来非常有趣。我正在研究它的性能如何... - M Katz
我尝试了brython,还有pyjaco和py2js/pyjamas。在所有情况下,我发现它们都“不适合实际应用”。Py2js非常复杂,但仍然不支持我代码中使用的所有Python语法(这是可以解决的,因为我可以通常修改代码以删除它们不支持的内容)。但致命问题是,使用它们很难追踪错误。它们提供最少量的错误报告,并且很难在编译后的JavaScript代码中设置断点,因为它是动态注入的(至少我不知道如何在这样的代码中设置断点)。 - M Katz
@MKatz,你最近有找到其他解决方案或测试更近期的版本吗?我认为Brython已经取得了长足的进步。 - Tobias Kienzler
@TobiasKienzler,我们大多数都在使用Chromium嵌入式框架的系统,服务器部分采用C++编写,客户端部分采用JavaScript编写。我们仍然有一些项目使用Python编写服务器代码。我会查看brython的更改情况。 - M Katz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接