Bộ đệm giao thức của Google: Ví dụ về JavaScript


80

Sử dụng Google Protocol Buffers trong JavaScript là lựa chọn tốt hay tốt hơn là sử dụng JSON?

Ngoài ra, sẽ thật tuyệt nếu ai đó có thể cho tôi một ví dụ đơn giản về triển khai Bộ đệm giao thức trong JavaScript. Tài liệu trên trang của Google rất khan hiếm.


4
Chủ đề SO này chứa nhiều thông tin về chủ đề này: stackoverflow.com/questions/7074147/...
alavrik

Câu trả lời:


74

[sửa] Việc triển khai bộ đệm giao thức nguồn mở của Google có sẵn trên github


Dự án protobuf chính thức chỉ hỗ trợ Java, C ++ và Python. Không phải Javascript.

Theo Wiki của dự án, có ba dự án chuyển các bộ đệm giao thức sang Javascript.

Protobuf.js được cập nhật. protobuf-js đã không được cập nhật trong hai năm, vì vậy tôi sẽ ủng hộ Protobuf.js.

Câu hỏi vẫn là "Tại sao" ?: protobuf có thể nhỏ hơn một chút, đặc biệt là khi nhiều giá trị số được chuyển, nhưng JSON chỉ đơn giản là giao thức phổ biến hơn trong không gian JS và có thể được hỗ trợ tốt hơn và dễ dàng tích hợp vào các công cụ khác.


11
Không nghi ngờ gì về việc JSON phù hợp hơn với hầu hết các trường hợp. Tuy nhiên, trong trường hợp của tôi, người gửi thư không nằm trong tầm kiểm soát của tôi và nó tuần tự hóa thành các thư protobuf, do đó chúng tôi cần phân tích cú pháp các thư từ javascript.
Jan Segre

21
@ Tại sao: Vì bạn viết tin nhắn và các phương thức dịch vụ dưới dạng proto và bạn nhận được bộ mã miễn phí? Serialization và deserialization ở cả phía máy khách / máy chủ.
Paweł Szczur

13
Lý do: lý do tương tự để sử dụng protobuf trong bất kỳ tình huống nào khác. Đừng quên rằng các trình duyệt hiện có WebSocket. Ngoài ra, các ứng dụng máy tính để bàn có thể được viết bằng JS cho Windows 8 và các ứng dụng, bao gồm cả máy chủ, trong Node.
Sprague,

4
Mã Khí hậu có một writeup tuyệt vời về những lợi ích của protobuf qua JSON
Jordan

5
Nếu API hệ thống của bạn đã có các ứng dụng khách nhị phân / protobuf khác, chẳng hạn như thiết bị Android hoặc iOS, thì việc sử dụng API proto hiện có cho ứng dụng khách web Javascript sẽ tự nhiên hơn là tạo bản sao thứ hai của API cung cấp JSON, chỉ để hỗ trợ một trang web.
Zero, Trick Pony

35

Cập nhật (28/7/2016): Bản 3.0.0 đã được xuất bản - hỗ trợ cả Javascript và các ngôn ngữ khác - cùng với một số tính năng khác.

Google gần đây đã thêm hỗ trợ alpha cho JS vào protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Sử dụng:

protoc -I=$SRC_DIR --js_out=$DST_DIR $SRC_DIR/addressbook.proto

Ảnh chụp màn hình từ tài liệu phát hành:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Trong khi chạy lệnh trên, tôi gặp lỗi "Thiếu tệp đầu vào".
Zeeshan Ajmal


-1

Hãy thử Protostuff !

Tôi đã gặp một chút khó khăn khi định cấu hình nhưng tôi chắc chắn rằng đó là vấn đề của tôi. Bạn có thể tuần tự hóa / giải mã hóa một thông báo protobuff / protostuff đến / từ JSON. Tôi đang ở giai đoạn đầu của việc sử dụng cái này nhưng nó có vẻ hứa hẹn cho đến nay.


1
Tò mò. Tại sao điều này lại bị bỏ phiếu (tôi không có ý kiến ​​gì về Protostuff)?
Pimin Konstantin Kefaloukos

9
@Pimin có lẽ vì protostuff là Java và câu hỏi là JavaScript?
Marc Gravell

1
Người @PiminKonstantinKefaloukos đang tìm kiếm thực hiện protobuf trên javascript
Holms

2
Tạo đối tượng Javascript cho GWT bằng Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Hoàn toàn về chủ đề.
Phân tích mờ

4
@fuzzyanalysis Công bằng mặc dù sau đó tôi gọi câu trả lời này là không đầy đủ thay vì chỉ đơn giản là sai. Vì bạn không thể mong đợi mọi khách truy cập biết cách biên dịch Java sang JS hoặc thậm chí biết GWT tồn tại, bạn sẽ mong đợi ít nhất một con trỏ đến GWT hoặc lý tưởng là một ví dụ làm việc để làm cho nó hoạt động trong GWT - vì điều đó có thể khá cuộc phiêu lưu.
Chris Moschini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.