我正在開發Android應用程序,用於農業機器。在Java WebSerivce(REST vs WebSocket)中發送大量記錄的最佳選擇
此應用程序將平均每分鐘生成10到40個日誌。
20小時後,SQLite中會存儲12,000到48,000條記錄。
我的問題是關於使用Internet將這些記錄提交給服務器的最佳選擇。
今天,我正在使用帶有JSF頁面和JAX-RS(澤西島)的Java Web應用程序來與Android進行通信。對於我使用PostgreSQL 9通過JPA連接的數據庫(EclipseLink)。
在我正在做的測試中,在我看來有問題通過REST發送所有這些數據,因爲這個過程很長。我遇到超時問題 等等。
嘗試解決問題並確保數據一致性。我正在發送分頁數據,並且只有在發送所有記錄後纔開始數據庫插入。
這解決了部分問題,但我不確定這是否是最好的方法。數據在服務器上的插入時間較長,由於超時,Android無法等待進程完成。
因此,用戶不確定該過程是否成功。只有經過很長時間,插入結束和用戶才能確認該過程是否成功。
它也會產生其他問題,因爲我必須阻止用戶執行新的發送數據,直到它從前一個進程收到確認。
這種情況的最佳解決方案是什麼?
我打算看的解決方案之一是WebSocket,但想知道其他開發人員的經驗。
您的服務器是否有狀態?如果是這樣,爲什麼不在異步POST請求完成時請求異步,然後客戶端請求返回,這將允許您對處理狀態進行一些輪詢?這解決了超時問題,並允許一定程度的用戶反饋;聽起來好像問題是溝通機制,聽起來不太合適。 – Fallso
我想一想。今天我做這樣的事情。但是我對流程進行了手動控制,我在會話中保留了一個ID/STATUS,但所有這些似乎都不安全。進程可能會崩潰,我無法控制它們。是否有任何優雅的解決方案來運行這些進程? –
看起來您的設置並未使用像Ajax這樣的可用工具,如果我無法控制現有的正在運行的進程或超時超時,我會非常擔心。你需要先解決這些問題!但是,這可能是有用的http://blog.arungupta.me/rest-vs-websocket-comparison-benchmarks/ – brianlmerritt