如何通过 Sockets 发送一个 "command" 对象在服务器上执行? Java

How to send a "command" Object through Sockets to be excecuted on the server? Java

我正在开发一个聊天程序。

[JAVA] [没有 RMI,只有套接字] [命令示例:'sentToMike'、'Disconnect'、'Login' 等]

如何通过套接字发送一个 "command" 对象直接在服务器上执行? 我想将各种消息(字符串、音频、视频)和各种命令对象发送给许多客户端,其中任何一个。我知道存在 ObjectInput/Output 个对象等等。我的问题是试图获得多态解决方案。

例如,我想创建一个带有方法签名的 IMessage 接口 "execute()"。然后我将创建一个实现 IMessage 的 AudioMessage、TextMessage 等。问题是在某些时候我需要与客户端共享服务器代码,反之亦然,以便服务器和客户端知道每个执行方法中涉及的所有对象。最糟糕的是,如果我发送 IMessage,服务器将不知道消息的具体类型,所以我不知道将对象转换为哪种类型。当我将命令发回客户端时,也会发生同样的情况。

我可以使用简单的文本字符串 "commands" 和服务器(顺便说一句,客户端)中又大又丑的开关来解决问题,但我认为这并不优雅,我需要使用字符串命令创建一个包装器 class 加上我要发送的那种对象加上带有已发送对象类型的字符串(Message[String type; String command; IMessage->AudioMessage ]),这不会是多态的,因为我需要使用开关来询问对象的类型,然后将其转换为 AudioMessage 等。此外,我需要在服务器和客户端之间共享大量代码,我不知道这样是否可行。

非常欢迎任何建议,也许我需要一种设计模式,一种架构模式,但我不知道。

出于安全原因不允许在服务器上 运行 任何代码!

但是如果您愿意将您的服务器(和客户端)暴露给未知代码,那么您还需要提供 classes 字节码,并具有 class 加载程序以启用实例化 classes' 您希望另一端接受的类型。为了希望调用此类对象的任何方法的目的。

(仅供参考,这只是重塑 RMI)。

如果你不必调用这个对象的任何东西(这不是你的情况,我知道,但我很容易这么说),那么它是被动的并且将它作为对象实例传输真的没有意义.