我需要为Java上的客户端 - 服务器聊天创建协议。 我使用xml在它们之间编码消息,但我无法决定如何将解码数据返回给服务器。
第一次,我创建了许多对象implements IAction
(例如Auth
对象代表一个数据包,关于聊天中的新用户),这取决于他们的内容。
因此,当服务器收到套接字时,它会调用我的public IAction decode(String s)
,然后服务器应确定它是什么对象:
if (myIAction instanceof Auth) {
server.doMagicAuth((Auth) myIAction);
}
但是对于我来说,看起来很丑陋和很多ifes
另一种方法是创建一个名为Packet
的公共对象,它可以包含intValue
,floatValue
,stringValue
等。还有一个标记,关于它是什么类型的数据包。
但这是碰撞最糟糕的想法。例如,如何将此数据包发送2个int值?例如密码和users_id?
最新的想法是观察服务器。
服务器应该有许多重载的public void action(IAction a)
方法(action(Auth a)
...等),协议应该通知服务器,具体取决于它是什么类型的数据包。
我无法决定使用什么方法。也许你有一些完全不同的想法?
答案 0 :(得分:1)
聊天客户端 - 服务器应用程序通常不发送/接收2个整数或3个浮点数或类似的东西,而只是字符串。 这些天我可能会发送序列化为字符串的JSON对象或只是简单的字符串。
如果使用XML是一个公司要求,则需要定义一些XML格式
(可能通过一些XSD,即使在你的情况下不是强制性的)
并坚持这种格式。例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message text="Hello"/>
当从任何客户端发送此消息时,您将其置于服务器端,
获取text
值并将其从服务器发送到所有连接的客户端。
我相信这就是他们想要的一切。