繁体   English   中英

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

[英]Referring a currently open XMPP connection from another python script present inside a django server

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

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

实施设置:

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

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

GCM应用服务器模块 :我使用CCS实现了GCM消息应用服务器 ,该服务器与谷歌的服务器(位于应用服务器和Android设备之间)通信,用于向运行Android的移动设备发送消息。 以下是他们的官方网站(上一个链接):

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

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

Python推理库和Django应用程序模块 :我在python中实现了推理库,处理从手机接收的传感器数据。 它有一个Django界面可以与Android设备通信。 推理库驻留在Django应用服务器中。

问题:

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

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

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

谢谢。

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

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

是! 使用multiprocessing 请参阅此问题的答案 - 访问在脚本主模块中定义的python类变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM