【问题标题】:What is the most effective way to minimize data for transfer over UDP?最小化通过 UDP 传输的数据的最有效方法是什么?
【发布时间】:2012-07-12 11:16:43
【问题描述】:

我对位和字节不太感兴趣,所以如果这个问题很愚蠢,我很抱歉。

我对套接字有一些经验,通常用于传输少量纯文本。但是这一次我必须传输更多可以通过 UDP 分解的数据。

我正在开发一个游戏,其中服务器是用 Java 编写的,我想向客户端发送一个对象数组。由于我是一名网络开发人员,因此 JSON 是用于传输数据的第一件事,尽管我非常怀疑这是网络中最有效的方式。

如果是 JSON:

{
    "players": [
        {
            "id": "884B0EAA2C7F16BA",   // hex string
            "name": "some guy",         // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }, {
            "id": "AB61F7C2AAE0B488",   // hex string
            "name": "some other guy",   // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }
    ]
}

现在,我可以添加一个自定义分隔符来拆分每个玩家的数据,并添加另一个分隔符来拆分数据。在我看来,最有效的方法之一是每行放置玩家的值,并在这些值之间放置一个预定义的字符序列。

884B0EAA2C7F16BA[|]some guy[|]0[|]0[|]0[|]0[|]0
AB61F7C2AAE0B488[|]some other guy[|]0[|]0[|]0[|]0[|]0

虽然这对我有用,但名称等仍然存在一些安全风险。我很难告诉客户包含“[|]”的显示名称是非法的。

什么是最小化传输数据的最有效方法?

任何关于加密的额外信息将不胜感激!

【问题讨论】:

  • "encryption" 不会最小化数据,compression 会最小化数据 - 您可以查看 gzip 压缩类(GZIPInput/output 流)之类的东西?

标签: java sockets encryption udp


【解决方案1】:

考虑使用 Google 协议缓冲区。您定义一条消息(在 .proto 文件中),它会为您生成不同编程语言的代码。

然后生成的代码能够对您的消息进行编码/解码,而无需您考虑数据是如何编码的。

编码后的消息非常小,编码/解码速度非常快。协议缓冲区在这方面真的很擅长。

网站上有一些很好的文档:https://developers.google.com/protocol-buffers/

【讨论】:

【解决方案2】:

如果您的目标是最大程度地减少传输数据,您总是可以尝试一种不太复杂的压缩算法(我们不想花费大量时间来压缩和解压缩每个数据包)。 您可以查看this question 或搜索外部库,例如this one

除非您可以确定每个数据字段的长度,否则您必须使用某种分隔符。避免在玩家名称中使用某些字符几乎在所有游戏中都使用,你为什么不能这样做?

如果您仍然希望允许任何角色出现在玩家名称中,请通过 TCP 套接字将所有角色一起发送,并在每个客户端中使用 ID-玩家名称对构建一个表,并在您的服务器中使用服务器提供的唯一 ID UDP 语句。这样,您就可以安全地使用分隔符了。

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多