我正在研究一种机制,用于在与语言无关的机制中通过套接字或共享内存传递数据。我不愿意使用XML,因为这些数据将非常结构化,编码/解码速度至关重要。拥有一个获得大量许可的优秀C API非常重要,但理想情况下应该支持大量其他语言。我查看了google's protocol buffers和ASN.1。我是在正确的轨道上吗?还有更好的东西吗?我应该只实现自己的打包结构而不是寻找一些标准吗?
答案 0 :(得分:11)
根据您的要求,我会使用Google Protocol Buffers。听起来它非常适合您的应用。
答案 1 :(得分:3)
您可以考虑使用XDR。它有一个RFC。我已经使用过它并且从未遇到任何性能问题。它在ONC RPC中使用,并且有一个名为rpcgen的工具。当你想要序列化数据时,你自己也很容易创建一个生成器(这是我为了便携性而最终做的,花了我半天)。 有一个开源C实现,但它已经可以在系统库中,因此您不需要这些源。
ASN.1对我来说似乎总是有点巴洛克式,但根据您的实际需求可能更合适,因为XDR存在一些限制。
答案 2 :(得分:3)
只是想把ASN.1投入到这个组合中。 ASN.1是一种格式标准,但是大多数语言都有库,而asn1c的C接口比C interface for protocol buffers更清晰。
答案 3 :(得分:2)
JSON真的是我最喜欢的这类东西。我之前没有二进制内容的经验。如果您打算使用JSON,请发布结果!
答案 4 :(得分:2)
Thrift是由Facebook创建的二进制格式。 Here's a comparison使用谷歌协议缓冲区。
答案 5 :(得分:1)
查看Hessian
答案 6 :(得分:1)
还有Binary XML但似乎还没有稳定下来。我链接的文章提供了一些可能感兴趣的链接。
答案 7 :(得分:1)
另一个选项是SNAC/TLV,AOL在其Oscar / AIM协议中使用该选项。
答案 8 :(得分:1)
同时查看Muscle。虽然它做了很多,但它序列化为二进制格式。
答案 9 :(得分:0)
你需要考虑几件事
1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards
ASN.1解析器有利于二进制表示,最好的部分是ASN.1是一种成熟的技术,在ITU-T及其外部广泛使用。该表示法得到了许多软件供应商的支持。