如何通过套接字发送要在服务器上执行的"command"对象?爪哇岛



我正在研究聊天程序。

[Java] [没有RMI,Just Sockets] [命令示例:'senttomike','disconnect','login'等]

如何通过插座发送"命令"对象,直接在服务器上被剥离?我想向许多客户(其中任何一个客户(发送各种消息(字符串,音频,视频(和各种命令对象。我知道存在对象/输出对象以及所有这些。我的问题是试图获得多态性解决方案。

例如,我想使用方法签名" execute(("创建一个iMessage接口。然后,我将创建一个实现iMessage的视听,文本介绍等。问题在于,在某个时候,我需要与客户端和viceversa共享服务器代码,并在服务器上和客户端知道每个切除方法中涉及的所有对象。最糟糕的是,如果我发送iMessage,服务器将不知道该消息是什么特定类型,所以我不知道哪种施放对象。当我将命令发送回客户端时,也会发生同样的事情。

我可以使用简单的文本字符串"命令"和服务器中的大而丑陋的开关(顺便说一句(来工作,但是我相信这不是优雅的,我需要创建一个包装器类使用字符串命令加上我要发送的类型以及带有对象类型的字符串的对象(Message [String type; String command; imessage-> audioMessage]((,这将是多态性的,因为我将需要使用以询问对象类型的开关,然后将其施放给视听。此外,我需要在服务器和客户端之间共享大量代码,我不知道这是否还可以。

任何建议都会非常欢迎,也许我需要一种设计模式,建筑模式,我没有任何线索。

有安全理由不允许在服务器上运行任何代码!

但是,如果您愿意将服务器(和客户端(公开为未知代码,那么您还需要服务类字节码,并让ClassLoaders启用Instanciat class类的类型,您期望另一端接受。您的协议必须发送外星类的完整className和位置(如果不插入字节码((及其在父级classloader中找不到的所有依赖项(,目的是希望调用该对象的任何方法。

(fyi,只是重新发明rmi(。

如果您不必在此对象上调用任何东西(我知道这不是您的情况,但我会说的(,那是被动的,将其作为对象实例运输确实没有意义。<<<<<<<<<<<<<</p>

相关内容

最新更新