2016-02-09 24 views
2

我試圖讓兩個Java進程通過RMI一起交談。在Java 8上。在Java 8上。我需要一臺Web服務器來爲機器加工Java RMI嗎?

我感覺事情已經開始了,但我是一個老式的挺身而出的人,並且想要堅持簡單的RMI。大部分在線文檔都相當過時。其餘的落在RMI框架的各種變化之間。目前我們行: -

  • 原始存根/骨架通過RMIC

  • 後的Java 4

  • 更改代碼庫參數在JDK 7更新21

  • 動態生成的存根方法
  • 提及此處的HTTP/FTP服務器tutorial

我有一個client.class和一個server.class,每個在不同的物理機器上。我不確定是否需要運行獨立的HTTP服務器(例如Apache httpd)來提供客戶端下載的存根文件。這似乎是代碼庫參數的要點。這對我來說似乎也是多餘的,儘管這不是動態生成的存根文件歸因於RMI註冊表程序的一點。如果我必須運行httpd,這是不是也會嘲笑擁有全部Java解決方案?你會從網頁主目錄提供什麼文件?它會是server.class的第二個副本,而不是導出到RMI註冊表的那個?這似乎有點混亂的文檔盟友。

那麼,機器到機器RMI需要一個Web服務器嗎?

+0

號,您不應該需要爲RMI Web服務器 - 我已經按照本教程中的成功和沒有一個HTTP服務器。 https://docs.oracle.com/javase/tutorial/rmi/ –

+0

@ cricket_007這聽起來很棒。在[您的示例](https://docs.oracle.com/javase/tutorial/rmi/overview.html)中,什麼是稱爲「Web服務器」的黃色框?那麼爲什麼它也會說_「在同一個例子中,類定義通常通過網絡服務器進行網絡訪問?也許你是在同一臺機器上做的? –

+0

我在大學做過實驗室練習。我相當肯定教授使用他的筆記本電腦作爲服務器,並且我們在筆記本電腦客戶端的教程末尾運行了ComputePi任務。我可能對網絡服務器完全錯誤,但我認爲網絡服務器的一般描述是「網絡上可訪問的服務器」,而不是像HTTP網站那樣的HTTP服務器** –

回答

1

那麼機器到機器RMI需要一個Web服務器嗎?

NO。你不需要需要一個web服務器。這只是服務器機器(具有藉助Remote對象實現的Remote接口的機器)應該從客戶端機器(機器調用方法)可見(可發現)。

我已經構建了幾個客戶端服務器應用程序和一個分佈式計算應用程序,其中唯一的事情是使被調用者基本上可以被調用者發現。與在本地網絡中運行應用程序的情況一樣,只需配置/etc/hosts文件即可爲我完成這項工作。

我有一個client.class和一個server.class,每個在不同的物理 機器。我不確定是否需要運行獨立的HTTP 服務器(例如Apache httpd)來提供客戶端下載 的存根文件。

NO。描述已在上面給出。

如果我必須運行httpd,那麼這是否也會嘲笑擁有全部Java解決方案?你會從網頁 目錄提供什麼文件?它會是服務器的第二個副本嗎?類,而不是一個 導出到RMI註冊表?

對於在網絡中運行的簡單客戶端 - 服務器應用程序(簡單的非Web應用程序),您不需要任何Web目錄。

遠程對象的存根充當遠程對象的客戶端本地代理或代理。調用者在本地存根上調用一個方法,該方法負責對遠程對象執行方法調用。在遠程JVM中,每個遠程對象都可能具有相應的骨架(在Java 2平臺環境中,不需要骨架)。骨架負責將調用分派給實際的遠程對象實現。有關Java RMI體系結構的詳細信息,請閱讀this鏈接。

沒有額外的文件需要下載來實現這一點。

+0

我讀過你的鏈接。它受版權保護1997,2006和2010年,並指JDKs 1.2,1.6,7和rmic編譯器。你可以理解我的困惑。儘管你沒有使用網絡服務器,但我很滿意。 –

+0

@PaulUszak - 不要混淆。我建議你開始構建你的應用程序,並且實際上面臨困難,而不是考慮以後會遇到的困難。在構建第一個應用程序本身之後,您會很清楚。祝你好運。 :) –

+0

@PaulUszak - 無論哪個答案更有幫助,併爲您工作,請隨時接受答案。祝你好運。瞭解如何接受答案 - > http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

1

您可以使用沒有代碼庫功能的RMI。這不是強制性的。

這裏提供的不僅僅是存根,還包括客戶端可能不知道的任何其他服務器端類的訪問:例如,如果指定遠程方法來返回接口或抽象類,則代碼庫功能可以用來部署返回值的實際實現。這使得實現類可以在沒有大量客戶端部署頭痛的情況下進行更新。它應該被看作是部署解決方案,而不是RMI的組成部分。

我是一個老式的有點傢伙,並希望堅持與普通的RMI。大部分在線文檔都相當過時。

沒有什麼改變。 1.5中的動態存根,1.7的代碼庫調整,自1.2以來沒有其他主要的。

我不確定是否需要運行獨立的HTTP服務器(例如Apache httpd)來提供客戶端下載的存根文件。

你不知道。往上看。

這似乎是代碼庫參數的要點。這對我來說似乎也是多餘的,儘管這不是動態生成的存根文件歸因於RMI註冊表程序的一點。

只有當您認爲代碼庫功能僅用於存根時,但不是:請參見上文。您甚至可以以相反的方向使用它,從客戶端到服務器,用於接口的實現類或用作遠程方法參數的抽象類。

如果我必須運行httpd,這是否也會對所有Java解決方案產生嘲弄?

沒有人說你必須運行HTTPD甚至HTTP服務器。例如,它可能是FTP。它可能是一個用Java實現的HTTP服務器。很多可能性。或者你根本無法使用該功能。

你會從網頁主目錄提供什麼文件?它會是服務器的第二個副本嗎?

號爲什麼?客戶端不需要server.class。

沒有一個輸出到RMI註冊表?

這也不是server.class,它是存根。

這一切似乎都是一個混亂的文件盟友。

我不同意。文檔中沒有出現上述的猜測。

那麼,機器到機器RMI需要一個Web服務器嗎?

相關問題