我的应用程序服务器的要求如下:
实施设置:
为了做到这一点,我的服务器有三个模块:
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应用服务器脚本中。我已经被困了几个星期才找到办法完成上述工作。
有没有办法在我当前的设置中执行此操作,还是需要添加其他图层/模块?
非常感谢任何帮助或建议。
感谢。
答案 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