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

时间:2014-08-22 07:59:53

标签: python django xmpp google-cloud-messaging xmpppy

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

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

    为了做到这一点,我的服务器有三个模块:

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

    GCM应用服务器模块:我已实施GCM Message App Server using CCS与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应用服务器脚本中。我已经被困了几个星期才找到办法完成上述工作。

    有没有办法在我当前的设置中执行此操作,还是需要添加其他图层/模块?

    非常感谢任何帮助或建议。

    感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

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

是的!使用multiprocessing。请参阅此问题的答案 - Accessing python class variable defined inside the main module of a script