Búferes de protocolo de Google: ejemplo de JavaScript


80

¿Es una buena opción utilizar Google Protocol Buffers en JavaScript o es mejor hacerlo con JSON?

También sería genial si alguien me pudiera dar un ejemplo simple sobre la implementación de Protocol Buffers en JavaScript. La documentación en el sitio de Google es escasa.


4
Este hilo SO contiene más información sobre el tema: stackoverflow.com/questions/7074147/…
alavrik

Respuestas:


74

[editar] La implementación de código abierto de búfer de protocolo de Google está disponible en github


El proyecto oficial de protobuf solo admite Java, C ++ y Python. No es Javascript.

Según la Wiki del proyecto, hay tres proyectos que portan búferes de protocolo a Javascript.

Protobuf.js está actualizado. protobuf-js no se ha actualizado durante dos años, por lo que preferiría Protobuf.js.

La pregunta sigue siendo "¿Por qué" ?: protobuf puede ser un poco más pequeño, especialmente cuando se transfieren muchos valores numéricos, pero JSON es simplemente el protocolo más común en el espacio JS y probablemente mejor soportado y más fácil de integrar en otras herramientas.


11
No hay duda de que JSON se adapta mejor a la mayoría de los casos. Sin embargo, en mi caso, el remitente del mensaje no está bajo mi control, y se serializa en mensajes protobuf, por lo que necesitamos analizar los mensajes desde javascript.
Jan Segre

21
@ Por qué: ¿Porque escribes un mensaje y métodos de servicio como proto y obtienes el esqueleto del código gratis? Serialización y deserialización en el lado cliente / servidor.
Paweł Szczur

13
Por qué: la misma razón para usar protobuf en cualquier otra situación. No olvide que los navegadores ahora tienen WebSocket. Además, las aplicaciones de escritorio se pueden escribir en JS para Windows 8 y las aplicaciones, incluidos los servidores, en Node.
Sprague

4
Code Climate tiene una excelente reseña sobre los beneficios de protobuf sobre JSON
Jordania

5
Si la API de su sistema ya tiene otros clientes binarios / protobuf, como dispositivos Android o iOS, entonces es más natural usar la API proto existente para un cliente web Javascript que crear una segunda copia de la API que ofrece JSON, solo para admitir una página web.
Zero Trick Pony

36

Actualización (28/7/2016): se publicó la versión 3.0.0 , que admite Javascript y otros idiomas también, además de algunas otras funciones.

Google ha agregado recientemente soporte alfa para JS a protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Uso:

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

Capturas de pantalla de la documentación de la versión:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Mientras ejecuto el comando anterior, aparece el error "Falta el archivo de entrada".
Zeeshan Ajmal


-1

¡Prueba Protostuff !

Me costó un poco configurarlo, pero estoy seguro de que ese fue más mi problema. Puede serializar / deserializar un mensaje de protobuff / protostuff a / desde JSON. Estoy en las primeras etapas de uso de esto, pero parece prometedor hasta ahora.


1
Curioso. ¿Por qué se votó en contra (no tengo opinión sobre Protostuff)?
Pimin Konstantin Kefaloukos

9
@Pimin probablemente porque protostuff es Java y la pregunta es JavaScript.
Marc Gravell

1
@PiminKonstantinKefaloukos persona está buscando implementación de protobuf en javascript
holms

2
Construyendo objetos Javascript para GWT usando Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Totalmente sobre el tema.
Análisis difuso

4
@fuzzyanalysis Fair, aunque entonces llamaría a esta respuesta incompleta en lugar de simplemente incorrecta. Dado que no puede esperar que todos los visitantes sepan cómo compilar Java en JS o incluso saber que GWT existe, esperaría al menos un puntero a GWT o, idealmente, un ejemplo práctico de cómo hacerlo funcionar en GWT, ya que eso podría ser bastante la aventura.
Chris Moschini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.