2015-11-27 58 views
2

我目前正在開展一個小規模的項目來證明某些工作有效,我目前有一個帶有Android SDK的智能頻帶設備。Android上的選項可將數據實時發送到服務器?

從此設備中,我使用SDK實時跟蹤用戶心率。

所以我的Android應用程序實時接收心率的更新。

這是很容易做到的,但是我現在需要實時從Android設備爲有效地發送這個數據到服務器成爲可能。

從電池耗盡開始就可以,因爲最初這只是一個概念證明。

我有限的,在實時發送大量數據到服務器,我想知道如果任何人有什麼可能是在Android的最佳途徑的想法的經驗?

我特地到同步適配器,但這些似乎更多的是關於保持客戶端和服務器之間的對齊的數據,這是後話,我不關心。另一種方法是查看來自Volley的RequestQueue是否可以工作,但我不確定是否值得一看?

我應該看看創建一個服務,並以某種方式使用套接字來傳輸數據?

編輯:它看起來像IntentService可能是用於處理任務的執行最好的選擇,但我假設的HTTP請求將客戶端太沉重,我應該考慮爲轉移別的東西?

+0

你有沒有試過像Pubnub,quickblox和解析實時服務之一? – Tony

+0

嗨託尼,謝謝,其中一些服務看起來很棒,我會在某個階段看看它們,但現在我需要在不使用軟件服務的情況下做到這一點。 –

+0

歡迎@donal我建議你先看看Pubnub,我已經在很多實時應用中使用它,它很棒 – Tony

回答

2

我正在研究類似的項目,但我正在處理的腕帶是Empatica E4。請記住,我不是一位專家開發人員,因此我也期待在我的設計中進行更正。此外,我會盡力爲我的想法一步一步地盡我所能。我希望這會爲你提供一些提示,幫助其他人。

因此,我目前的架構看起來像; 所有的

System Architecture


首先,Empatica還提供了一個Android SDK來接收數據。 SF代表採樣頻率,而EDA,Temp,BVP和AccXYZ是我手腕上的傳感器。每個傳感器具有不同的採樣頻率,最大值爲64 Hz,每個採樣間隔15 ms。這個時間間隔對於執行所有操作來說相當具有挑戰性,因此我將傳感器數據緩存在(易失性LinkedBlockingQueue)FIFO隊列中,以便我不會錯過任何樣本。這一切都發生在我的應用程序的服務中。

現在,我有我與ScheduledExecutorService用來從隊列中的250毫秒的時間間隔收集樣品一個Runnable任務(你可以改變它根據自己的需要,但我用250毫秒考慮我的需求,網絡延遲和設備性能)並將它們放入單個JSON對象中。此可運行任務收集的樣本數量隨每個傳感器而變化,這些BVP:16個樣本,AccXYZ:8個樣本,Temp:1個樣本和EDA:1個樣本。在輸出中,我有一個JSON對象,將數據發送到我的服務器。

對於傳輸數據到我的服務器,我使用HTTP POST請求。原因很簡單,快速,高效並且適合併發。我正在使用Volley framework,它將自行處理我所有的網絡相關問題。所以我只需在Volley RequestQueue中添加JSON對象,我的客戶端就完成了。正如您所提到的,您可以使用套接字連接來實現您的目標,但我必須使用多個設備,因此在我的情況下,套接字可能會出現問題以實現併發性。我也嘗試通過使用HttpURLConnection手動執行它,但代碼變得單調乏味並且難以處理。



最後,我在服務器端有一個REST API(用Python),它將處理POST請求,解析數據並將其插入到我的MySQL數據庫中。截至目前,我仍在使用此REST API來解析數據並將其存儲在數據庫中。但是,我測試了我的應用程序,並且成功地將我的設備中的數據接收到服務器。

關於你的問題「我應該考慮創建一個服務,並以某種方式使用套接字來傳輸數據?」,如果你正在一個設備上工作,這是一個很好的選擇。如果多個設備,我認爲Http是更好的選擇。

關於你的第二個問題,我認爲Http對客戶來說不會很沉重,而且Volley正在爲你自己付出所有的痛苦。你只需要提出一個請求隊列就可以了!你可以找到很多很好的排球教程,我特別關注this

我希望我的回答能幫助你一點。由於我仍然在研究這件事情,而且我還沒有拿出最終產品,所以我不能確定地告訴其中涉及的風險,但如果發生新的事情,我會保持更新。另外,我願意接受任何可以提供幫助的建議和想法。最後,上面的圖片不是很詳細,我是爲你做的,只是爲了分享我如何處理同一個想法。

相關問題