4

我们目前正在使用 Ajax 调用 .net Web 服务,然后将 Json 对象返回给客户端。其中一些 Json 对象非常庞大(> 500k 未压缩)。我们听说了一些关于 Google Protocol Buffers 的好消息,并且一直在试验。

到目前为止,我们在服务器上使用似乎是最常见的 .net 版本 - “protobuf-net”进行序列化已经很幸运了。我们在客户端上反序列化的运气并不好。我们尝试使用似乎是唯一的 javascript 反序列化器 protobuf.js。我们发现它不好用,示例或文档很少,而且似乎无法处理字符串和整数以外的数据类型。

在这一点上,似乎会有一个经过验证的、定义良好的解决方案,用于 .net 和 Web 客户端之间的二进制数据序列化/反序列化。也许我们遗漏了一些明显的东西。

我们的要求是来自客户端的 Ajax 调用和服务器上的 .net Web 服务方法(.asmx 或 WCF)。

任何意见和建议表示赞赏。

4

3 回答 3

5

如果客户端是javascript,我想你会很挣扎。有(如你所说)有限的javascript 覆盖范围,但我不确定它会给你带来很多好处。引用 Kenton Varda(真正了解 protobuf)的话:

javascript 和 protobuf 的一个问题是您需要大量支持代码来解析消息。除非你最终来回发送相当多的东西,否则让用户下载一个 JS protobuf 编解码器库可能是一个净损失。使用 JSON 或 XML 可能会更好,因为浏览器已经内置了对它们的支持。

也就是说,我认为谷歌内部的许多人已经使用 javascript + 协​​议缓冲区有一段时间了,如果我们最终得到了足够好的东西,我们会发布它。

所以,也许还有希望。现在我会坚持使用 json + deflate,或者如果您的场景允许,您也许可以使用嵌入在客户端中的 Silverlight 小程序?protobuf-net 将在 Silverlight 中工作。

于 2009-07-16T18:02:46.467 回答
2

您可能会发现 JSON 实际上是最好的答案。Justin 对 JSON 与 Thrift 和 Protocol Buffers 进行了一系列性能比较,发现压缩的 JSON 比协议缓冲区更快,至少在 Python 中是这样。这是有关该主题的较早主题。

于 2009-07-16T18:57:23.673 回答
0

如前所述,使用 javascript 中的二进制协议是有问题的。一些特别讨厌的方面是:

与对 JSON 或 XML 的原生支持相比,性能不太可能更快。

于 2011-02-07T23:09:56.367 回答