3

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

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

实施设置:

为了做到以上几点,我的服务器有三个模块:

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

GCM 应用服务器模块:我已经使用 CCS实现了 GCM 消息应用服务器,它与 Google 的服务器(位于应用服务器和 Android 设备之间)进行通信,以便向/从运行 Android 的移动设备传递消息。以下来自他们的官方网站(上一个链接):

GCM 云连接服务器 (CCS) 是一个 XMPP 端点,它提供到 Google 服务器的持久、异步、双向连接。该连接可用于在您的服务器和用户的 GCM 连接设备之间发送和接收消息。

在文档中,他们提供了一个示例 python 脚本,我参考并用于实现我的 GCM App 服务器。此实现作为永久运行的独立脚本执行。

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

问题:

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

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

任何帮助或建议将不胜感激。

谢谢。

4

2 回答 2

1

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

于 2014-08-22T20:36:51.617 回答
1

有没有办法用我目前的设置做到这一点?

是的!使用multiprocessing. 查看这个问题的答案 - Accessing python class variable defined inside the main module of a script

于 2014-09-02T12:12:36.957 回答