![](/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.