【发布时间】:2018-04-28 15:17:38
【问题描述】:
我正在开发一个聊天程序。
[JAVA] [没有 RMI,只有 Sockets] [命令示例:'sentToMike'、'Disconnect'、'Login' 等]
如何通过套接字发送“命令”对象以直接在服务器上执行? 我想向许多客户发送各种消息(字符串、音频、视频)和各种命令对象,其中任何一个。我知道存在 ObjectInput/Output 对象和所有这些。我的问题是试图获得一个多态的解决方案。
例如,我想创建一个带有方法签名“execute()”的 IMessage 接口。然后我会创建一个实现 IMessage 的 AudioMessage、TextMessage 等。问题是在某些时候我需要与客户端共享服务器代码,反之亦然,以便服务器和客户端知道每个执行方法中涉及的所有对象。最糟糕的是,如果我发送 IMessage,服务器将不知道该消息的具体类型,所以我不知道该对象的类型。当我将命令发送回客户端时也会发生同样的情况。
我可以使用简单的文本字符串“命令”和服务器中的一个大而丑陋的开关(顺便说一下在客户端)解决一个问题,但我认为这并不优雅,我需要创建一个包装类使用字符串命令加上我要发送的对象类型加上已发送对象类型的字符串(消息 [字符串类型;字符串命令;IMessage->AudioMessage ]),这不会是多态的,因为我需要使用例如,询问对象类型然后将其转换为 AudioMessage 的开关。此外,我需要在服务器和客户端之间共享大量代码,我不知道这是否可以。
非常欢迎任何建议,也许我需要一个设计模式,一个架构模式,我不知道。
【问题讨论】:
标签: java sockets command polymorphism serversocket