我有多个客户端和一个服务器。每个客户都可以使用一些命令,例如:
public interface Command {
public int run();
}
public class CommandOne implements Command {
// ...
}
public class CommandTwo implements Command {
// ...
}
这些命令可以在客户端(在他们的机器上)执行 - 或者可以“传递”到服务器执行,然后返回结果。
在Java中实现客户端和服务器的最简单方法是什么?
以下是我的想法:
switch
语句,实例化相同类型的新命令,运行它并返回结果。这意味着如果我添加一个新的命令类,我将不得不更新客户端和服务器。我有什么遗失的吗?
修改
每个请求必须以某种方式进行线程化 - 因为多个客户端可以同时与服务器通信。不过,这可能不是上述问题的问题。
答案 0 :(得分:0)
在一个丑陋的世界里,你可以做的简单事情是让你的服务器公开一个像
这样的界面/commands?run=CommandOne
并传递一些参数(在正文或查询字符串中)以保存命令参数。
然后使用某个HTTP客户端向该URI提交HTTP请求。服务器将实例化并调度一些命令以执行您想要的操作。
在更结构化的世界中,您应该研究RPC调用或RESTful架构风格。
答案 1 :(得分:0)
我发现一个非常优雅和有趣的解决方案。
如果您打开一个端口并且只有等待“Runnable”进入的侦听器,则可以执行run方法。变量将全部传递,无论run方法做什么。
更好的是有一个“runOnServer()”和“runOnClient()”方法。客户端创建对象,将其传递给服务器并继续运行,服务器执行runOnServer()方法(针对变量,因为它们被序列化)然后该类自动序列化回客户端,其中runOnClient()东西被执行。
在服务器上执行某些操作非常灵活。
如果你想要更高级,请查看Hazlecast,它已经这样做了。