Ich habe einige Fragen zur Anpassung des Befehlsprotokolls für die Verwendung in meiner Client-Server-Umgebung gestellt. Nach einigen Experimenten bin ich jedoch zu dem Schluss gekommen, dass es für mich nicht funktionieren wird. Es ist nicht für dieses Szenario konzipiert. Ich stehe also vor einem Rätsel.
Ich habe bereits eine Art RPC-Mechanismus implementiert, wobei ich eine Klasse mit dem Namen "Operation" hatte. Ich hatte auch ein Enum mit dem Titel "Action", das Namen für Aktionen enthielt, die auf dem Server aufgerufen werden konnten.
In meinem alten Projekt wurde jedes Mal, wenn der Client eine Aktion auf dem Server aufrufen wollte, eine Instanz von "Operation" erstellt und die Aktionsvariable mit einem Wert aus der Aufzählung "Action" versehen. Zum Beispiel
Operation serverOpToInvoke = new Operation(); serverOpToInvoke.setAction(Action.CREATE_TIME_TABLE); serverOpToInvoke.setParameters(Map params); ServerReply reply = NetworkManager.sendOperation(serverOpToInvoke); ...
Auf der Serverseite musste ich die schreckliche Aufgabe bewältigen, die aufzurufende Methode zu ermitteln, indem ich den Enum-Wert "Action" mit einer Reihe von "if/else"-Anweisungen untersuchte. Wenn eine Übereinstimmung gefunden wurde, würde ich die entsprechende Methode aufrufen.
Das Problem dabei war, dass es unübersichtlich und schwer zu pflegen war und letztlich ein schlechtes Design war.
Meine Frage ist also - Gibt es eine Art von Muster, die ich folgen kann, um eine schöne, saubere und wartbare rpc-Mechanismus über einen TCP-Socket in Java zu implementieren? RMI ist ein no go für mich hier, da der Client (Android) nicht RMI unterstützt. Ich habe in diesem Stadium alle Möglichkeiten ausgeschöpft. Die einzige andere Option wäre vielleicht ein REST-Dienst. Jeder Rat wäre sehr hilfreich.
Vielen Dank für Ihre Aufmerksamkeit. Mit freundlichen Grüßen