二进制协议已经过时了吗?

40

似乎早期由于网络速度慢(拨号上网),存在更多二进制协议,现在我看到所有东西都被HTTP和SOAP/REST/XML替代了。

为什么会这样呢?

二进制协议是否真的已经消失了,还是只是不那么流行了?它们为什么会消失或变得不那么流行?


5
ZIP文件是二进制协议吗? - S.Lott
2
我更多地谈论网络相关的内容。 - Earlz
1
从你的问题中,定义“everything”和“dead”。还要定义“binary protocol”。 - MattH
“我更多地谈论网络” - 你指的是哪个网络层? - MattH
1
SSL/TLS、NFS/Sun RPC、X11、SMB/CIFS、VNC、SSH和rsync都是常用的二进制协议,立即浮现在脑海中。ASCII协议变得更加普遍的原因似乎主要是由于使用HTTP作为传输层,而不是裸TCP,并且(通常)在另一侧使用JavaScript。对于这两种情况,与使用XML或JSON等文本协议相比,使用二进制协议将会很麻烦。 - Jack Lloyd
显示剩余3条评论
15个回答

1

二进制协议将在需要效率的地方继续存在。它们主要存在于较低层,硬件实现比软件实现更为常见的地方。速度不是唯一的因素 - 实现的简单性也很重要。让芯片处理二进制数据消息比解析文本消息要容易得多。


1

它们并没有死亡,因为它们是每个通信系统的基础层。每个主要通信系统的数据链路网络层都基于某种“二进制协议”。

以互联网为例,您现在可能正在使用以太网在局域网中,PPPoE与您的ISP进行通信,IP浏览网页,也许使用FTP下载文件。所有这些都是“二进制协议”。

我们看到上层协议向基于文本的协议转变,因为与“二进制协议”相比,它们更容易开发和理解,并且大多数应用程序没有严格的带宽要求。


0
二进制协议已经死了吗?
两个答案:
1. 希望如此。 2. 不。
至少,二进制协议比XML更好,它提供了二进制协议的所有可读性,同时比良好设计的ASCII协议效率低。

0

取决于应用程序... 我认为在实时环境中(FireWire、USB、现场总线...)始终会需要二进制协议。


0

Eric J的回答已经说得很清楚了,但是这里还有一些更多的思考和事实。请注意,以下内容不涉及媒体协议(视频、图像)。有些内容可能对您来说很清楚,但我每天都听到一些谣言,所以在这里给您解释一下...

  • 二进制协议和文本协议在表达能力上没有区别。您可以使用相同的可靠性传输相同的信息。

  • 对于每个最佳的二进制协议,您都可以设计一个最佳的文本协议,它只需要大约多15%的空间,并且您可以在键盘上输入该协议。

  • 在实践中(我每天看到的实际协议),由于许多二进制协议的静态特性,差异甚至更小。

例如,取一个可以变得非常大的数字(例如,在32位范围内),但通常很小。在二进制中,人们通常将其建模为四个字节。在文本中,通常是打印数字后跟冒号。在这种情况下,小于十的数字变为两个字节,小于100的数字变为三个字节。(当然,您可以声称二进制编码不好,并且可以使用一些大小位使其更加空间有效,但这是另一件您必须记录、实现双方并能够在传输过程中进行故障排除的事情。)
例如,在二进制协议中的消息通常由长度字段和/或终止符框定,而在文本协议中,您只需使用CRC。
实际上,由于所需的冗余性,差异通常不那么显着。
无论是二进制还是文本,您都需要一定程度的冗余性。二进制协议通常不留出错误的余地。您必须完全正确地记录发送的每一位,由于我们大多数人都是人类,这种情况很少发生,您无法充分阅读它以得出安全结论。

总之:二进制协议在理论上更节省空间和计算资源,但实际上差异往往不如你想象的大,而且这种交易通常不值得。我正在从事物联网领域的工作,几乎每天都要处理定制、设计不良的二进制协议,这些协议非常难以排除故障,实现起来很烦人,而且并没有更节省空间。如果你不需要绝对调整电池的最后一毫安和计算微控制器周期(或传输媒体),请三思而行。


你有没有在物联网领域中基于文本的协议的例子? - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接