2014-03-31 55 views
0

我在理解網絡模式和非網絡模式術語之間的區別時遇到困難,因爲這些術語在處理java中的客戶端服務器應用程序時使用。網絡模式和非網絡模式之間的區別

我知道如何開發簡單的客戶端服務器應用程序。例如,我可以創建客戶端應用程序和服務器應用程序。這些應用程序可以通過套接字連接併發送和接收數據。然而,當人們談論以獨立模式運行服務器和客戶端時,我感到困惑,其中客戶端和服務器都使用同一個JVM實例,而沒有涉及到環回網絡。我看到這發生在java derby數據庫中。

所以我的主要問題是如何使用套接字進行通信並將其轉換爲使用所謂的「獨立模式」的代碼,客戶端和服務器作爲一個應用程序運行?我會很感激任何意見,這些意見將我指向正確的材料。

回答

1

在所謂的網絡模式下,您必須連接到遠程服務器,正如您所描述的那樣,通常通過套接字,因此您的客戶端請求服務器執行某些任務,服務器執行任務並響應客戶。

在這種模式下,習慣上客戶端和服務器會是不同的節點,即不同的機器,獨立運行。

但是如果你想在同一臺機器上運行你的客戶端和你的服務器呢?即使在同一個虛擬機中?通過套接字來請求服務器執行某些操作是否合理?

這就像使用Skype與朋友聊天坐在你身邊,只是要求他去吃午飯。

因此,理想情況下,在這些情況下,您應該能夠以非網絡模式運行您的應用程序。也就是說,不是通過套接字,而是直接訪問服務器對象,並要求它爲您做些事情。由於您的服務器對象與您的客戶端位於同一個虛擬機中。

顯然,你是能夠做到這一點,你需要一個好的設計,通過一個接口暴露你的服務器功能,並且您的應用程序使用此接口與服務器進行交互。當你在網絡模式下運行,您使用使用插座(或RMI或任何你進行網絡通信做)這個服務器接口的實現。當您處於非網絡模式時,您將獲得服務器對象本身的實現。

+0

這清除了我的一些混淆。但這意味着你將服務器和客戶端綁定在一個jar中。 – sheu

+0

@sheu不一定,你可以捆綁在一個罐子的客戶端和其他服務器,但在獨立模式下,你必須在類路徑,即'Java的罐子都-cp client.jar中:的server.jar -Dmode =並且standlone MyApp的' –