【问题标题】:bundling python "back end" code in a phonegap app在phonegap应用程序中捆绑python“后端”代码
【发布时间】:2013-06-23 06:58:19
【问题描述】:

短版

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

加长版

我有许多应用程序正在考虑移植到 phonegap。通常,应用程序是用 Python 编写的。其中一些具有 Web 前端,其中一些是具有基于 wxpython 接口的独立 Python 应用程序。

所以每个应用程序都有一些客户端的东西,它们已经在 html+javascript+css 中,或者我很乐意翻译成 html+javascript+css。

对于服务器端,对于某些应用程序,可以将服务器代码留在服务器上。但是对于一些/大多数,我想将服务器端逻辑与 phonegap 应用程序一起打包,因此它可以是一个独立的应用程序。这个需求来自两个需求。一是这些应用程序中有许多用于应急响应,即使在手机信号塔和其他网络基础设施不可用的情况下也需要工作。另一个原因很简单,一些应用程序非常简单,不保证客户端/服务器架构——它们只是碰巧有很多用 Python 编写的“后端逻辑”类型代码。

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

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

所以在 javascript 代码中,我可以让客户端调用一些函数,例如“InvokeBackEndMethod()”。这很像 ajax 调用,但不是在网络上调用,而是将 query/url/message 发送到 Python 插件。我的理解是 phonegap 插件可以保持持久状态(例如,数据库插件允许您调用一次打开数据库,随后调用读取并关闭它)。因此,Python“服务器”代码可以像在真实服务器上一样维护其状态。事实上,Python 代码可能正在运行像 cherrpy 这样的 Web 框架,因此它确实就像在同一个移动应用程序中同时运行客户端和服务器一样。

我的问题是:

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

(2) 有人已经解决了这个问题吗?我希望找到一个名为“phonegap server”的项目,它本质上是一个“通用”PhoneGap 扩展,从某种意义上说,它会接收来自客户端的任意呼叫,并将这些呼叫发送给您选择的各种机制:Python、Java、mono 等(即,这个通用 phonegap 扩展将被各种语言“插件”“扩展”,然后这些插件又将被用户在给定中添加的任何业务逻辑“扩展”语言)。大多数人可能不需要这样的项目,因为他们不需要断开连接和/或他们没有想要部署的“后端”逻辑的大型代码库在独立应用程序中,但保留原始语言。但似乎有些人肯定需要它,不是吗?

【问题讨论】:

  • 不,PhoneGap 应用程序应该只是客户端代码。但是您可以在包装 PhoneGap 代码的 Java/Python 代码中编写逻辑。
  • @limelights:对,我的扩展想法本质上是将 Java/Python 代码放在包装器中(即,在嵌入式浏览器之外的 phonegap 部分)。我的问题是是否有人已经为此建立了框架。

标签: python plugins cordova client-server


【解决方案1】:

您应该查看两个截然不同的计划:http://omz-software.com/pythonista/ 允许导出到 Xcode 项目。

还有https://github.com/brython-dev/brython 使用 Python 而不是 Javascript 进行 HTML5 开发。

【讨论】:

  • 谢谢。 pythonista 是一个太多的“包”,仅适用于 iOS,但 brython 看起来很有趣。我正在研究它的表现如何......
  • 嗯,我试过了 brython,还有 pyjaco 和 py2js/pyjamas。在所有情况下,我发现他们“还没有准备好迎接黄金时段”。 Py2js 非常复杂,但它仍然不支持我的代码中使用的所有 python 语法(这是可行的,因为我可以一般地修改代码以删除它们不支持的内容)。但杀手锏是所有这些都很难找到你的错误。它们给出的错误报告最少,而且很难在编译的 javascript 代码中设置断点,因为它是动态注入的(至少我不知道如何在此类代码中设置断点)。
  • @MKatz 您是否同时找到了其他解决方案或测试了更新的版本?我认为 Brython 已经走了很长一段路
  • @TobiasKienzler,我们主要转移到使用 Chromium Embedded Framework 的系统,服务器部分使用 C++,客户端部分使用 javascript。我们仍然有一些使用 Python 编写服务器代码的项目。我将检查对 brython 的更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
相关资源
最近更新 更多