2011-10-02 67 views
1

有一些RMI,我知道它比較脆弱,直接的Socket連接,它的級別很低,而Strings儘管看起來像實體一樣穩定隱喻的PHP。Java中的網絡通信選項(客戶機/服務器)

對於基於Internet的客戶端/服務器通信,我有哪些基本選項?有什麼優點/缺點?我應該考慮哪些問題?第三方庫的建議是好的,只要它們保持平臺獨立(即沒有限制本地代碼)。

尋找選擇,而不是一個明確的答案,所以我把我自己的要求的細節留空。

+0

我想說你的項目的細節可能會決定你的需求。也就是說,讓軟件要求告訴你(我們)哪個方向最適合情況!就我個人而言,我是插座的忠實粉絲......但我當然可以看到套接字是不是Java的「一刀切」部分:) – claymore1977

回答

2

正如你指定的「基於互聯網的」,有很多的基於HTTP的,RESTful做法可以說(我強調你應該考慮的一些問題):

優點:

  • 您可以使用/濫用無數的Web層的一個框架服務器端(如Spring MVCPlay!
  • 工作級別低^ h如已在客戶端(阿帕奇了HTTPClient)進行
  • 純文本協議很容易調試上線的可用工具
  • 噸,以幫助您調試的相互作用(例如SoapUI) - 你可以假裝成客戶端或服務器和隔離,發展,直到另一端準備
  • 使用衆所周知的端口(80/443)使得通過企業防火牆一個一大堆衝孔容易

缺點:

  • 有一個相當重大的假設服務器會做的最大份額工作 - 如果你的模式是「倒」,那麼它可能沒有多大意義是REST風格
  • 原始性能會比位上了線基於套接字的方法
  • 純文本協議下很容易sniff在線(SSL可以彌補這一點)
+0

謝謝,這正是我正在尋找的答覆。簡潔,但仍然詳細,鏈接到更多的閱讀材料。現在,如果您可以請重複所有其他選項? ;) –

0

'相對脆弱'是什麼意思? RMI的問題與它在狹窄的基礎上成爲一個大型的超級結構有關,特別是它對DNS和對象序列化有很大的依賴性。越接近芯片,任何程序越脆弱,但編寫的代碼越多。這是一個折衷。儘管我已經寫了一本關於它的書,但我並不是一個獨眼的RMI支持者,但'脆弱'這個詞太強大了。它做它做的事情,而且做得相當好。如果您需要大規模的可擴展性,RMI/IIOP在很多方面會做得更好。如果您對世界的看法是最多一次遠程方法調用而沒有太多的安全性,RMI/JRMP將會給您。從模型中得到的越遠,就越難以應用。