Java客户端 - 服务器聊天协议设计

时间:2014-01-26 16:53:51

标签: java client-server

我需要为Java上的客户端 - 服务器聊天创建协议。 我使用xml在它们之间编码消息,但我无法决定如何将解码数据返回给服务器。

第一次,我创建了许多对象implements IAction(例如Auth对象代表一个数据包,关于聊天中的新用户),这取决于他们的内容。 因此,当服务器收到套接字时,它会调用我的public IAction decode(String s),然后服务器应确定它是什么对象:

if (myIAction instanceof Auth) {
   server.doMagicAuth((Auth) myIAction);
}

但是对于我来说,看起来很丑陋和很多ifes

另一种方法是创建一个名为Packet的公共对象,它可以包含intValuefloatValuestringValue等。还有一个标记,关于它是什么类型的数据包。 但这是碰撞最糟糕的想法。例如,如何将此数据包发送2个int值?例如密码和users_id?

最新的想法是观察服务器。 服务器应该有许多重载的public void action(IAction a)方法(action(Auth a) ...等),协议应该通知服务器,具体取决于它是什么类型的数据包。

我无法决定使用什么方法。也许你有一些完全不同的想法?

1 个答案:

答案 0 :(得分:1)

聊天客户端 - 服务器应用程序通常不发送/接收2个整数或3个浮点数或类似的东西,而只是字符串。 这些天我可能会发送序列化为字符串的JSON对象或只是简单的字符串。

如果使用XML是一个公司要求,则需要定义一些XML格式 (可能通过一些XSD,即使在你的情况下不是强制性的)
并坚持这种格式。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message text="Hello"/>

当从任何客户端发送此消息时,您将其置于服务器端,
获取text值并将其从服务器发送到所有连接的客户端。
我相信这就是他们想要的一切。