![](/img/trans.png)
[英]Best method of connection between automated python XMPP server and interface to django?
[英]Referring a currently open XMPP connection from another python script present inside a django 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.