2013-03-19 126 views
1

簡短版本:需要關於爲客戶/服務器應用程序選擇java網絡框架的建議(優缺點),該客戶/服務器應用程序的用戶數/請求數較少且數據量較大。建議選擇java的網絡框架

可能的選項:

  1. RMI
  2. 阿帕奇河
  3. Netty的(這似乎更面向異步,它可以做同步調用?)
  4. 一些其他的框架,這將使我的生活變得更輕鬆? :)

龍版本:目前的項目,我的工作是用Java編寫的桌面應用程序,允許用戶優化供應鏈的一部分。請注意,到目前爲止,該應用程序僅限桌面。它在本地機器上安裝了一個數據庫,就是這樣。現在我們有新的要求來更改代碼以支持共享/網絡數據庫。在網絡服務器上安裝數據庫並啓動應用程序的多個實例(如預期的那樣)出現了很多問題。最大的問題來自數據庫交互不是在考慮併發的情況下開發的。我們有很多的鎖等待和幾個死鎖發生。我們決定修改數據訪問層以解決新的需求。

似乎無法編寫DAL以允許併發訪問,而無需分離客戶端和服務器中的應用程序,該服務器將處理數據訪問以及可能的某些業務邏輯。我們不需要非常高性能的解決方案,但沒有那麼多的消息,但問題在於數據量。

一個典型的應用場景是這樣的:

  1. 啓動應用程序從一個CSV文件(通常是600MB-1GB之間)
  2. 導入數據,並將其保存以供將來使用
  3. 添加場景配置(非常少量的數據)並將它們存儲起來
  4. 啓動優化(從步驟1獲取數據,應用配置,應用一些優化/限制)
  5. 顯示opti結果結果。

第4步將在服務器上完成,第1-3步和第5步將在客戶端上執行。

你們有意見/建議嗎? 謝謝。

+0

據我所知,問題是你在本地機器上有一個600Mb - 1GB的文件,需要將它上傳到服務器。我對嗎? – 2013-03-19 22:49:47

+0

@PiotrGwiazda是的,基本上你是對的。該文件將在本地機器上導入,並轉換爲應用程序使用的數據格式,並應存儲到數據庫以供在步驟4中使用。同樣在第3步,簡單配置更改(更改雙字段,將一些實體添加到列表中)也應該被存儲。 – 2013-03-20 08:00:13

回答

0

所以真正的問題是如何上傳大量的數據。 對於這樣的解決方案,我不會去RMI--它太受限制了。 阿帕奇河似乎是某種發明。 Netty是一個低級網絡框架。你將被迫編寫自己的協議。

我只是使用簡單的HTTP服務器和HTTP POST請求上傳數據。您可以使用Gzip壓縮。對於大文件,HTTP非常好。

在服務器端任何servlet容器可能會做(Tomcat,Jetty等)。

在客戶端Apache HTTP Components應該足夠了。您也可以嘗試Ning Async HTTP Client

+0

RMI怎麼樣「太受限制」了?我知道RMI並不完美,取決於您的使用情況,它可能不是適合工作的正確工具,但「太受限制」了? – 2013-03-20 21:20:16

+0

另外,應該注意的是,如果你使用HTTP,你必須做一些會話處理,因爲它是一個無狀態協議。 – 2013-03-20 21:26:54

+0

通過說RMI太受限制,我的意思是在模塊之間引入非常緊密的耦合。您需要在相同版本中爲所有API,DTO和用於Java序列化的異常使用相同的Java類。您需要在桌面客戶端上保持同步。更新過程可能很難。如果它只是一個HTTP POST,你不需要HTTP會話。您需要通過HTTP請求保持會話。 – 2013-03-21 11:06:06