谷歌协议缓冲区或类似于.NET/JavaScript的东西

4
我们目前使用Ajax调用.net Web服务,然后将返回的Json对象传递给客户端。其中一些Json对象非常大(> 500k未压缩)。我们听说过Google Protocol Buffers并进行了一些实验。
到目前为止,在服务器上使用似乎是最常见的.net版本“protobuf-net”进行序列化效果不错。但在客户端上反序列化并不顺利。我们尝试使用似乎是唯一的JavaScript反序列化程序protobuf.js,但发现它不易于使用,例子和文档很少,而且似乎无法处理字符串和整数以外的数据类型。
此时,似乎已经有了针对.net和Web客户端之间的二进制数据序列化/反序列化的成熟、明确定义的解决方案。也许我们错过了一些显而易见的东西。
我们的要求是从客户端进行Ajax调用,并在服务器上使用.net Web服务方法(.asmx或WCF)。
欢迎提出任何评论和建议。
3个回答

5
如果客户端是javascript,我认为你会遇到困难。正如你所说,javascript的覆盖范围有限,但我不确定它是否会对你有很大帮助。根据Kenton Varda的引用(他真的很了解protobuf):
“javascript和protobuf的一个问题是你需要大量支持代码来解析消息。除非你最终发送了大量的东西来回传输,否则让用户下载JS protobuf编解码库可能会造成净损失。使用JSON或XML可能更好,因为浏览器已经内置了这些支持。”
“话虽如此,我认为谷歌内部的各种人一直在玩javascript + protocol buffers,如果我们最终得到任何工作得足够好的东西,我们将发布它。”
也许未来会有希望。目前,我建议使用json + deflate,或者如果您的情况允许,可以在客户端中嵌入Silverlight小程序。protobuf-net可以在Silverlight中运行。

2

0

如上所述,使用JavaScript的二进制协议存在问题。一些特别恶劣的方面包括:

与原生支持JSON或XML相比,性能很可能不会更快。


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