Java 减少UDP传输数据的最有效方法是什么?
我对字节和位的理解不是太多,所以如果这个问题很愚蠢,我很抱歉 我对套接字有一些经验,通常用于传输少量纯文本。然而,这次我必须传输更多的数据,我可以通过UDP来分解这些数据 我正在开发一个游戏,其中服务器是用Java编写的,我想向客户端发送一个对象数组。由于我是一名webdeveloper,JSON是传输数据的第一个弹出窗口,尽管我高度怀疑这是网络中最有效的方式 对于JSON:Java 减少UDP传输数据的最有效方法是什么?,java,sockets,encryption,udp,Java,Sockets,Encryption,Udp,我对字节和位的理解不是太多,所以如果这个问题很愚蠢,我很抱歉 我对套接字有一些经验,通常用于传输少量纯文本。然而,这次我必须传输更多的数据,我可以通过UDP来分解这些数据 我正在开发一个游戏,其中服务器是用Java编写的,我想向客户端发送一个对象数组。由于我是一名webdeveloper,JSON是传输数据的第一个弹出窗口,尽管我高度怀疑这是网络中最有效的方式 对于JSON: { "players": [ { "id": "884B0EAA2C7F
{
"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
虽然这对我来说是可行的,但是在名字等方面仍然存在一些安全风险。我几乎无法告诉客户端,包含“[|]”的显示名是非法的
减少传输数据的最有效方法是什么?
任何有关加密的附加信息都将不胜感激 考虑使用Google协议缓冲区。您定义了一条消息(在.proto文件中),它用不同的编程语言为您生成代码 生成的代码可以对消息进行编码/解码,而无需考虑数据的编码方式 编码的消息将非常小,编码/解码速度非常快。协议缓冲区在这方面非常好
网站上有一些很好的文档:如果你的目标是最小化传输数据,你可以尝试一种不太复杂的压缩算法(我们不想花很多时间压缩和解压缩每个数据包)。 您可以查看或搜索外部库,例如 除非可以确定每个数据字段的长度,否则必须使用某种分隔符。避免在玩家姓名中使用某些字符几乎在每个游戏中都会用到,为什么你不能这样做呢
如果您仍然希望允许在播放器名称中使用任何字符,请通过TCP套接字将所有字符一起发送,并在每个客户端中使用pairs ID player name构建一个表,并在UDP语句中使用服务器提供的唯一ID。通过这种方式,您可以安全地使用分隔符。“加密”不是最小化数据,而是压缩最小化数据-您可以查看类似于gzip压缩类(GZIPInput/Output streams)的内容?我将对此进行研究。听起来很有趣!谷歌让我惊奇的是他们所有的神奇工具,API'SI也应该考虑Apache节俭提供相同的东西。看到这个了吗