Google-Protokollpuffer: JavaScript-Beispiel

80

Ist es eine gute Wahl, Google-Protokollpuffer in JavaScript zu verwenden, oder ist es besser, dies mit JSON zu tun?

Es wäre auch großartig, wenn mir jemand ein einfaches Beispiel für die Implementierung von Protokollpuffern in JavaScript geben könnte. Die Dokumentation auf der Google-Website ist knapp.

Nikolakoco
quelle
4
Dieser SO-Thread enthält weitere Informationen zum Thema: stackoverflow.com/questions/7074147/…
alavrik

Antworten:

73

[Bearbeiten] Googles Open-Source-Implementierung von Protokollpuffern ist auf github verfügbar


Das offizielle Protobuf-Projekt unterstützt nur Java, C ++ und Python. Nicht Javascript.

Laut dem Wiki des Projekts gibt es drei Projekte, die Protokollpuffer nach Javascript portieren.

Protobuf.js ist auf dem neuesten Stand. protobuf-js wurde seit zwei Jahren nicht mehr aktualisiert, daher würde ich Protobuf.js bevorzugen.

Die Frage ist immer noch "Warum"?: Protobuf ist möglicherweise etwas kleiner, insbesondere wenn viele numerische Werte übertragen werden, aber JSON ist einfach das gebräuchlichste Protokoll im JS-Bereich und wird wahrscheinlich besser unterstützt und ist einfacher in andere Tools zu integrieren.

dmeister
quelle
11
Kein Zweifel, dass JSON für die meisten Fälle besser geeignet ist. In meinem Fall ist der Absender der Nachricht jedoch nicht unter meiner Kontrolle und wird in Protobuf-Nachrichten serialisiert. Daher müssen wir die Nachrichten aus Javascript analysieren.
Jan Segre
21
@Warum: Weil Sie eine Nachricht und Servicemethoden als Proto schreiben und das Skelett des Codes kostenlos erhalten? Serialisierung und Deserialisierung auf Client- / Serverseite.
Paweł Szczur
13
Warum: der gleiche Grund, Protobuf in jeder anderen Situation zu verwenden. Vergessen Sie nicht, dass Browser jetzt über WebSocket verfügen. Außerdem können Desktopanwendungen in JS für Windows 8 und Anwendungen, einschließlich Server, in Node geschrieben werden.
Sprague
4
Code Climate hat eine großartige Beschreibung der Vorteile von Protobuf gegenüber JSON
Jordanien
5
Wenn die API Ihres Systems bereits über andere Binär- / Protobuf-Clients wie Android- oder iOS-Geräte verfügt, ist es natürlicher, die vorhandene Proto-API für einen Javascript-Webclient zu verwenden, als eine zweite Kopie der API zu erstellen, die JSON bietet, nur um dies zu unterstützen eine Internetseite.
Zero Trick Pony
35

Update (28.7.2016): Release 3.0.0 wurde veröffentlicht - unterstützt neben einigen anderen Funktionen auch Javascript und andere Sprachen.

Google hat kürzlich Alpha-Unterstützung für JS zu Protobufs hinzugefügt: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Verwendung:

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

Screenshots aus der Release-Dokumentation:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

AlikElzin-Kilaka
quelle
Beim Ausführen des obigen Befehls wird der Fehler "Fehlende Eingabedatei" angezeigt.
Zeeshan Ajmal
-1

Probieren Sie Protostuff !

Ich hatte einige Schwierigkeiten beim Konfigurieren, aber ich bin mir sicher, dass dies eher mein Problem war. Sie können eine Protobuff / Protostuff-Nachricht an / von JSON serialisieren / deserialisieren. Ich bin in den frühen Stadien der Verwendung, aber es sieht bisher vielversprechend aus.

JeffSpicoli
quelle
1
Neugierig. Warum wurde dies abgelehnt (ich habe keine Meinung zu Protostuff)?
Pimin Konstantin Kefaloukos
9
@Pimin wahrscheinlich, weil Protostuff Java ist und die Frage JavaScript ist?
Marc Gravell
1
@ PiminKonstantinKefaloukos Person sucht Protobuf-Implementierung auf Javascript
Holms
2
Erstellen von Javascript-Objekten für GWT mithilfe von Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Total zum Thema.
Fuzzy-Analyse
4
@fuzzyanalysis Fair, obwohl ich diese Antwort dann eher unvollständig als einfach falsch nennen würde. Da Sie nicht erwarten können, dass jeder Besucher weiß, wie man Java zu JS kompiliert oder sogar weiß, dass GWT existiert, würden Sie zumindest einen Zeiger auf GWT oder im Idealfall ein funktionierendes Beispiel dafür erwarten, dass es in GWT funktioniert - da dies durchaus möglich sein könnte das Abenteuer.
Chris Moschini