谷歌协议缓冲区:JavaScript示例

91

在JavaScript中使用Google协议缓冲区(Protocol Buffers)是一个好选择还是使用JSON更好?

另外,如果有人能给我一个简单的JavaScript中实现协议缓冲区的例子就太好了。Google网站上关于此的文档很少。


4
这个SO帖子包含有关该主题的更多信息:https://dev59.com/JWw05IYBdhLWcg3wuUAL - alavrik
5个回答

80

[编辑] 谷歌的协议缓冲区的开源实现可在GitHub上获取。


官方protobuf项目仅支持Java,C ++和Python。不支持JavaScript。

根据该项目的Wiki,有三个将协议缓冲区移植到JavaScript的项目。

Protobuf.js是最新的。

protobuf-js已经两年没有更新了,因此我会倾向于使用Protobuf.js。

问题仍然是“为什么?”:尽管在传输许多数字值时protobuf可能更小,但JSON在JS空间中更常见,并且可能更好地支持和更容易集成到其他工具中。


11
毫无疑问,对于大多数情况而言,JSON更适合。但在我的情况下,消息发送者不受我的控制,它序列化为protobuf消息,因此我们需要从JavaScript解析这些消息。 - Jan Segre
25
为什么要将消息和服务方法编写为proto格式?这样可以免费获得代码框架。在客户端和服务器端进行序列化和反序列化。 - Paweł Szczur
17
为什么:和在其他情况下使用 protobuf 的原因一样。不要忘记浏览器现在支持 WebSocket。此外,可以使用 JS 编写 Windows 8 的桌面应用程序,并且可以在 Node 中编写包括服务端应用程序在内的应用程序。 - Sprague
4
Code Climate在博客中详细介绍了Protobuf相对于JSON的优点。 - Jordan
6
如果您的系统API已经有其他二进制/protobuf客户端(例如Android或iOS设备),那么使用现有的proto API来为Javascript web客户端提供支持比构建第二份API以提供JSON更加自然。 - Zero Trick Pony
显示剩余8条评论

45

运行上述命令时,我收到了“缺少输入文件”的错误提示。 - Zeeshan Ajmal

6

1
2023年更新。 JS实现已经引入并从主要的protoc应用程序中分支出来。 现在你可以使用以下命令进行安装:
npm i grpc-tools
然后使用node node_modules/grpc-tools/bin/protoc.js,参数与通常的protoc相同。例如:
node node_modules/grpc-tools/bin/protoc.js --js_out=import_style=commonjs,binary:./dst --proto_path=./proto/ simple.proto
要在通常的require中使用它,还需要安装:
npm i google-protobuf
然后你可以简单地require生成的结果文件并使用它。

但是grpc-tools是用于GRPC的,我想... - undefined
1
GRPC在底层使用了Protocol Buffers。可能会有一些额外开销,但它能正常工作。 - undefined

-1

试试Protostuff

我在配置上遇到了一些困难,但我相信那更多是我的问题。你可以将一个Protobuff/Protostuff消息序列化/反序列化为JSON。我还处于使用的早期阶段,但目前看起来很有前途。


1
好奇。为什么这个被投票否决了(我对Protostuff没有意见)? - Pimin Konstantin Kefaloukos
9
可能是因为Protostuff是Java语言,而问题涉及到JavaScript语言。 - Marc Gravell
1
@PiminKonstantinKefaloukos 正在搜索 JavaScript 的 protobuf 实现。 - holms
2
使用Protostuff为Google Web Toolkit构建Javascript对象: http://code.google.com/p/protostuff/wiki/GwtJsonOverlays。完全符合主题。 - Fuzzy Analysis
4
虽然我认为这个回答应该被视为不完整而非错误,但公平来说它是正确的。因为不能期望每个访问者都知道如何将Java编译成JS,或者甚至知道GWT的存在,你至少期望给出一个指向GWT的链接,或者最好提供一个在GWT中运行它的实例 - 因为那可能是一次很有趣的冒险。 - Chris Moschini
嘿,GWT是谷歌的,他们是否在GWT中使用Protobuf?看起来“他们”应该已经提供了这个! - Norman H

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