python - 从 django 服务器中存在的另一个 python 脚本引用当前打开的 XMPP 连接

标签 python django xmpp google-cloud-messaging xmpppy

我的应用服务器的要求如下:

  1. 从手机接收传感器数据(使用 HTTP)
  2. 处理它们(python 库)
  3. 向移动设备发送通知(在 Android 设备上呈现为通知)

实现设置:

为了完成上述工作,我的服务器具有三个模块:

  • Django 应用程序模块:为推理库提供 HTTP 接口(interface),以满足 Android 设备向服务器发送的 HTTP 请求。
  • Python 推理库:处理从手机接收到的传感器数据
  • GCM 应用服务器模块:解释如下

GCM 应用服务器模块:我已经实现了 GCM Message App Server using CCS与 Google 的服务器(位于应用程序服务器和 Android 设备之间)对话,用于向运行 Android 的移动设备发送消息或从移动设备发送消息。以下是他们的官方网站(上一个链接):

The GCM Cloud Connection Server (CCS) is an XMPP endpoint that provides a persistent, asynchronous, bidirectional connection to Google servers. The connection can be used to send and receive messages between your server and your users' GCM-connected devices.

在文档中,他们提供了一个示例 python 脚本,我已经引用并用于实现我的 GCM 应用程序服务器。此实现作为一个永远运行的独立脚本执行。

Python 推理库和 Django 应用程序模块:我已经在 python 中实现了推理库,用于处理从手机接收到的传感器数据。它有一个 Django 接口(interface)来与 Android 设备对话。推理库驻留在 Django 应用程序服务器中。

问题:

GCM 应用服务器脚本包含一些函数,其中之一是 send_message(), 用于向 Android 设备发送消息。当一些处理过的数据可以发送到设备时,我需要在我的推理库脚本中引用这个函数。或者我需要引用持久打开XMPP连接客户端发送消息。我想避免将处理代码放在 GCM 应用程序服务器脚本中。我已经被困了数周才能找到一种方法来完成上述工作。

有没有办法用我当前的设置来做到这一点,或者我是否需要添加一些其他层/模块?

如有任何帮助或建议,我们将不胜感激。

谢谢。

最佳答案

我认为你的想法是正确的。您希望处理代码和通信代码之间有明确的分离。有很多方法可以解决这个问题,我能想到的一种简单方法是在 GCMApp 服务器中有一个 Queue 对象,并在 Queue.get() 方法上创建一个线程 block 。与正在处理的 django 应用程序共享同一个队列对象,只要处理过的数据可用,就将其推送到队列中。被阻塞的线程将唤醒并将其发送到设备。其他方法不是使用队列,而是使用套接字。另一种方法是使用事件循环,https://docs.python.org/3/library/asyncio-eventloop.html ,这在 python 3.0 中可用,但您可以查看一般的事件循环。我建议你从一些简单的事情开始,让它工作,然后开始让它变得漂亮。 让我知道它是否有意义。

关于python - 从 django 服务器中存在的另一个 python 脚本引用当前打开的 XMPP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25442240/

相关文章:

Python 错误 : null byte in input prompt

django - 当 many=True 时验证数据列表

python - XMPP聊天: accessing contacts' status messages with xmppPy's Roster

python - Mac : How can I use Python 3. 7 在 Visual Studio Code 的命令行中?

python - 通过识别重要变量来降维

python - 如何重命名具有相同列名的数据框的列?

iphone - XMPP 框架 : Not able to receive my messages

python - 如何更改 Django 管理过滤器以使用下拉列表而不是也可以搜索的列表?

python - 在 Django 中允许每个用户生成 1 个 View

xmpp - Openfire 是否支持通过 Http-Bind 的 TLS?如果不是,还有什么选择