簡體   English   中英

如何在Java中將方法或對象從客戶端傳遞到服務器?

[英]How do I pass a method or object from client to server in Java?

我有多個客戶端和一台服務器。 每個客戶端可以使用一些命令,例如:

public interface Command {
    public int run();
}

public class CommandOne implements Command {
    // ...
}

public class CommandTwo implements Command {
    // ...
}

這些命令可以在客戶端(在其計算機上)中執行-或可以將它們“傳遞”給服務器以執行,然后將返回結果。

在Java中同時實現客戶端和服務器的最簡單方法是什么?

以下是我想出的內容:

  • 序列化命令,將其傳遞給服務器,讓服務器反序列化,運行命令並返回結果。 (這無法使用,因為方法無法序列化。)
  • 將命令的名稱(作為字符串)傳遞給服務器,讓服務器運行switch語句,實例化相同類型的新命令,運行該命令,然后返回結果。 這意味着,如果我添加了新的命令類,則必須同時更新客戶端和服務器。
  • 將必要的方法邏輯序列化為某種結構(JSON,XML等),將其傳遞給服務器,讓服務器將其反序列化為自定義類,運行方法邏輯,然后返回結果。 這似乎有些矯kill過正,需要編寫DSL。

有什么我想念的嗎?

編輯

每個請求必須以某種方式進行線程化-因為多個客戶端可以同時與服務器通信。 但是,這可能不是上述問題的問題。

在一個丑陋的世界中,您可以做的簡單事情就是使您的服務器公開一個類似於

/commands?run=CommandOne

並傳遞一些參數(在正文或查詢字符串中)以保存命令參數。

然后,使用一些HTTP客戶端向該URI提交HTTP請求。 服務器將實例化並分派一些命令以執行所需的操作。

在更加結構化的世界中,您應該研究RPC調用或RESTful體系結構樣式。

我發現一種解決方案非常優雅且有趣。

如果您打開端口並且有一個監聽器正在等待“ Runnable”的進入,則可以執行run方法。 變量將全部傳遞出去,並且無論run方法做什么都將完成。

更好的是使用“ runOnServer()”和“ runOnClient()”方法。 客戶端創建對象,將其傳遞給服務器,然后繼續運行,服務器執行runOnServer()方法(針對變量,因為它們已經被序列化了),然后該類自動序列化回客戶端,其中runOnClient()東西被執行了。

使得在服務器上執行某些操作確實很靈活。

如果您想更高級,請研究Hazlecast,它已經做到了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM