似乎早期由于网络速度慢(拨号上网),存在更多二进制协议,现在我看到所有东西都被HTTP和SOAP/REST/XML替代了。
为什么会这样呢?
二进制协议是否真的已经消失了,还是只是不那么流行了?它们为什么会消失或变得不那么流行?
似乎早期由于网络速度慢(拨号上网),存在更多二进制协议,现在我看到所有东西都被HTTP和SOAP/REST/XML替代了。
为什么会这样呢?
二进制协议是否真的已经消失了,还是只是不那么流行了?它们为什么会消失或变得不那么流行?
二进制无可替代
与文本协议相比,二进制协议始终更具空间效率。 即使互联网速度大幅提高,我们希望传达的信息的数量和复杂性也随之增加。
您提到的文本协议在标准化、灵活性和易用性方面都非常出色。 但是,在某些情况下,二进制传输的效率将超过这些因素。
许多信息是二进制的,可能永远不会被文本协议取代。 视频流媒体就是一个明显的例子。
即使您使用GZip压缩文本协议,通用的压缩算法也永远无法像针对特定数据流设计的二进制协议那样有效。
但有时您并不需要
之所以看到更多基于文本的协议,是因为与广泛应用的应用程序数据大小相比,传输速度和数据存储容量确实快速增长。 我们人类发现使用文本协议更容易,因此我们使用文本表示形式构建了 ubiquitous XML协议。 当然,如果我们确实必须节省每个字节,我们可以将XML创建为二进制协议,并构建通用工具来可视化和处理数据。
然而,有时确实需要二进制
许多开发人员习惯于使用多个GB、多个核心的计算机进行思考。 即使是现今普通的手机也比我的第一台IBM PC-XT更强大。 但是,在嵌入式设备等平台上,对处理能力和内存有相当严格的限制。 在处理此类设备时,二进制可能是必需的。
虽然高级语言是大多数编程工作的首选工具,并且在一定程度上由于CPU速度和存储容量的增加而变得成为可能,但它们并没有消除对汇编语言的需要。
类似地,非二进制协议引入了更多的抽象性和扩展性,因此特别适用于应用层通信。它们也受益于带宽和存储容量的增加。然而,在更低的层次上,浪费这样的资源仍然是不切实际的。
此外,与编程语言不同,其中有强烈的激励“承担性能损失”,以换取增加的简单性、开发速度等,在通信结构化为分层的情况下,较低层次的复杂性和“二元性”就相当透明,不会对应用层产生影响。例如,只要收到的SOAP消息没有问题,应用程序就不需要知道这些消息实际上已被压缩以便在传输过程中使用。
在一些应用程序中,如非常低带宽通信,始终需要使用二进制协议。但是文本协议具有巨大的优势。例如,我可以使用Firebug轻松查看我的应用程序发出的每个HTTP调用发送和接收的内容。试试用二进制协议做到这一点吧 :)
文本协议的另一个优点是,尽管它们比二进制协议不那么空间有效,但文本数据压缩得非常好,因此数据可能会自动压缩以获得最佳效果。例如,请参见HTTP压缩。
我看到一些用于互联网应用的二进制协议
二进制协议并没有死亡。在许多情况下,发送二进制数据更加高效。
WCF支持使用TCP进行二进制编码。 http://msdn.microsoft.com/en-us/library/ms730879.aspx
这当然完全取决于应用程序是什么。到目前为止,已经有两种一般类型的例子,一个是与xml/html相关的答案,另一个是与视频/音频相关的。前者被设计为“共享”,正如乔纳森所指出的,而后者在数据传输方面更高效(没有Matrix视觉,“读”电影就永远不会像读HTML文档那样有用)。
调试的便利性并不是选择文本协议而不是“二进制”协议的理由 - 数据传输的要求应该决定这一点。我在航空航天业工作,其中大部分通信都是高速、可预测的数据流,比如高度和无线电频率,因此它们被分配到数据流中的位上,无需人类可读的包装。它的传输效率也非常高,并且除了干扰检测之外,不需要任何元数据或协议处理。
所以我可以肯定地说它们还没有消亡。
我同意人们的选择可能受到他们需要调试它们的事实的影响,但这还将严重依赖于可靠性、带宽、数据类型和所需的处理时间(以及可用的功率!)。