Буфери протоколів Google: Приклад JavaScript


80

Чи вдалий вибір використовувати буфери протоколів Google у JavaScript, чи краще це робити з JSON?

Також було б чудово, якщо хтось може дати мені простий приклад про реалізацію буферів протоколів у JavaScript. Документація на сайті Google обмежена.


4
Це SO нитка містить більше інформації про предмет: stackoverflow.com/questions/7074147 / ...
alavrik

Відповіді:


74

[редагувати] Реалізація Google з відкритим кодом буферів протоколів доступна на github


Офіційний проект protobuf підтримує лише Java, C ++ та Python. Не Javascript.

Згідно з Вікі проекту, існує три проекти, які переносять буфери протоколів на Javascript.

Protobuf.js є актуальним. protobuf-js не оновлювався два роки, тому я хотів би підтримати Protobuf.js.

Питання все-таки "Чому" ?: protobuf може бути трохи меншим, особливо коли передається велика кількість числових значень, але JSON - це просто більш поширений протокол у просторі JS і, можливо, краще підтримується та легше інтегрується в інші інструменти.


11
Без сумніву, JSON більше підходить для більшості випадків. Однак у моєму випадку відправник повідомлень не перебуває під моїм контролем, і він серіалізується до повідомлень protobuf, тому нам потрібно проаналізувати повідомлення з javascript.
Ян Сегре

21
@ Чому: Тому що ви пишете повідомлення та методи обслуговування як прото, і ви отримуєте скелет коду безкоштовно? Серіалізація та десеріалізація на стороні клієнта / сервера.
Павел Щур,

13
Чому: та сама причина використовувати протобуф у будь-якій іншій ситуації. Не забувайте, що браузери тепер мають WebSocket. Також настільні програми можна писати у форматі JS для Windows 8, а програми, включаючи сервери, у Node.
Sprague

4
Code Climate має велику інформацію про переваги протобуфу над JSON
Йорданія,

5
Якщо API вашої системи вже має інші бінарні клієнти / клієнти protobuf, такі як пристрої Android або iOS, то природніше використовувати існуючий прото API для веб-клієнта Javascript, ніж створювати другу копію API, що пропонує JSON, лише для підтримки веб-сторінку.
Zero Trick Pony

36

Оновлення (28.07.2016): Опубліковано випуск 3.0.0 - на додаток до деяких інших функцій, що підтримує Javascript та інші мови.

Нещодавно Google додав альфа-підтримку JS до protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Використання:

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

Знімки екрану з документації до випуску:

введіть тут опис зображення

введіть тут опис зображення


Під час запуску вище команди я отримую помилку "Відсутній вхідний файл".
Zeeshan Ajmal


-1

Спробуйте Protostuff !

Мені було важко налаштувати, але я впевнений, що це було більше моєї проблеми. Ви можете серіалізувати / десеріалізувати повідомлення protobuff / protostuff в / з JSON. Я на ранніх етапах використання цього, але поки це виглядає багатообіцяючим.


1
Цікаво. Чому це було проголосовано проти (я не маю думки щодо Protostuff)?
Пімін Костянтин Кефалукос

9
@Pimin, мабуть, тому, що protostuff - це Java, а питання в JavaScript?
Марк Гравелл

1
@PiminKonstantinKefaloukos людина шукає реалізацію protobuf на javascript
holms

2
Створення об’єктів Javascript для GWT за допомогою Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Повністю по темі.
Нечіткий аналіз

4
@fuzzyanalysis Fair, хоча я б тоді назвав цю відповідь неповною, а не просто неправильною. Оскільки ви не можете очікувати, що кожен відвідувач знатиме, як скомпілювати Java в JS або навіть знати, що GWT існує, ви очікуєте принаймні вказівника на GWT або, в ідеалі, робочого прикладу його роботи в GWT - оскільки це може бути цілком пригода.
Chris Moschini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.