Bufory protokołu Google: przykład JavaScript

80

Czy dobrym wyborem jest użycie buforów protokołów Google w JavaScript, czy lepiej jest to zrobić z JSON?

Byłoby też świetnie, gdyby ktoś podał mi prosty przykład implementacji buforów protokołów w JavaScript. Dokumentacja na stronie Google jest znikoma.

nikolakoco
źródło
4
Wątek SO zawiera więcej informacji na ten temat: stackoverflow.com/questions/7074147/...
alavrik

Odpowiedzi:

74

[edytuj] Otwarta implementacja buforów protokołów Google jest dostępna na github


Oficjalny projekt protobuf obsługuje tylko Java, C ++ i Python. Nie JavaScript.

Według Wiki projektu, istnieją trzy projekty przenoszące bufory protokołów do Javascript.

Protobuf.js jest aktualny. Protobuf-js nie był aktualizowany od dwóch lat, więc wolałbym Protobuf.js.

Pytanie wciąż brzmi „Dlaczego” ?: protobuf może być nieco mniejszy, zwłaszcza gdy przesyłanych jest wiele wartości liczbowych, ale JSON jest po prostu bardziej powszechnym protokołem w przestrzeni JS i prawdopodobnie lepiej obsługiwany i łatwiejszy do zintegrowania z innymi narzędziami.

dmeister
źródło
11
Nie ma wątpliwości, że JSON jest bardziej dopasowany do większości przypadków. Jednak w moim przypadku nadawca wiadomości nie jest pod moją kontrolą i jest serializowany do wiadomości protobuf, dlatego musimy przeanalizować wiadomości z javascript.
Jan Segre
21
@Dlaczego: Ponieważ piszesz wiadomość i metody obsługi jako proto, a szkielet kodu dostajesz za darmo? Serializacja i deserializacja po stronie klienta / serwera.
Paweł Szczur
13
Dlaczego: ten sam powód, aby używać protobuf w każdej innej sytuacji. Nie zapominaj, że przeglądarki mają teraz WebSocket. Ponadto aplikacje desktopowe mogą być napisane w JS dla Windows 8, a aplikacje, w tym serwery, w Node.
Sprague
4
Code Climate ma świetny opis zalet protobuf w porównaniu z JSON
Jordan,
5
Jeśli interfejs API twojego systemu ma już innych klientów binarnych / protobuf, takich jak urządzenia z Androidem lub iOS, bardziej naturalne jest użycie istniejącego protokołu API dla klienta internetowego Javascript niż utworzenie drugiej kopii interfejsu API, który oferuje JSON, tylko w celu obsługi stronę internetową.
Zero Trick Pony
36

Aktualizacja (28.07.2016): opublikowano wydanie 3.0.0 - obsługujące Javascript i inne języki - oprócz kilku innych funkcji.

Google niedawno dodało obsługę alfa dla JS do protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Stosowanie:

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

Zrzuty ekranu z dokumentacji wydania:

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

AlikElzin-kilaka
źródło
Podczas wykonywania powyższego polecenia otrzymuję komunikat o błędzie „Brak pliku wejściowego”.
Zeeshan Ajmal
-1

Wypróbuj Protostuff !

Miałem trochę trudności z konfiguracją, ale jestem pewien, że to bardziej mój problem. Możesz serializować / deserializować wiadomość protobuff / protostuff do / z formatu JSON. Jestem na wczesnym etapie używania tego, ale na razie wygląda to obiecująco.

JeffSpicoli
źródło
1
Ciekawy. Dlaczego ten głos został odrzucony (nie mam opinii na temat Protostuff)?
Pimin Konstantin Kefaloukos
9
@Pimin prawdopodobnie dlatego, że protostuff to Java, a pytanie brzmi JavaScript?
Marc Gravell
1
@PiminKonstantinKefaloukos osoba szuka implementacji protobuf w javascript
holms
2
Tworzenie obiektów Javascript dla GWT przy użyciu Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Całkowicie na temat.
Analiza rozmyta
4
@fuzzyanalysis Fair, chociaż nazwałbym tę odpowiedź raczej niepełną niż po prostu błędną. Ponieważ nie możesz oczekiwać, że każdy odwiedzający będzie wiedział, jak skompilować Javę do JS lub nawet wie, że GWT istnieje, spodziewasz się przynajmniej wskaźnika do GWT lub idealnie działającego przykładu uruchomienia go w GWT - ponieważ może to być dość przygoda.
Chris Moschini