簡體   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