gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:34:52 25 4
gpt4 key购买 nike

我需要为 Java 上的客户端-服务器聊天创建一个协议(protocol)。我使用 xml 对它们之间的消息进行编码,但我无法决定如何将解码后的数据返回到服务器。

第一次,我创建了许多对象实现 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) ...等),并且协议(protocol)应该根据哪种类型通知服务器数据包就是这样。

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

最佳答案

聊天客户端-服务器应用程序通常不会发送/接收 2 个整数或 3 个 float 或类似的内容,而只是发送/接收字符串。如今,我可能会发送序列化为字符串的 JSON 对象或仅发送纯字符串。

如果使用 XML 是硬性要求,您需要定义某种 XML 格式
(可能通过一些 XSD,尽管这在您的情况下不是强制性的)
并坚持这种格式。示例:

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

当从任何客户端发送此消息时,您将在服务器端接收它,
获取 text 值并将其从服务器发送到所有连接的客户端。
我相信,这就是他们对你的期望。

关于Java客户端-服务器聊天协议(protocol)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com