2012-09-01 28 views
19

Existe un problema de cómo compartir búferes entre node.js y el navegador que contiene datos binarios. Estoy muy contento con Socket.io como una capa de transporte, pero el problema es que no hay puertos del Buffer class para el navegador. No es algo que puedo encontrar de todos modosCompartir búfer binario entre el servidor Node.js y el navegador

También he encontrado binary.js y me preguntaba si hay una buena manera de combinarlos teniendo el socket.io como la capa de transporte y el Binary.js como el medio de datos. También vi esto question, que está como tema pero no resuelve el problema.

Sé que socket.io agregó soporte binario pero no he encontrado ninguna documentación sobre el tema.

Actualización:

Parece que binary.js no será la solución. El requisito básico que deseo es compartir las mismas capacidades que tiene Buffer en el nodo con el navegador.

Mis necesidades están formados por dos cosas:

  1. la manija de la memoria intermedia de la misma manera tanto en el servidor y el navegador.

  2. support Datos binarios.

Probablemente usaré Array Buffer.

Editar: Como node.js se ejecuta sobre V8 puede usar ArrayBuffer. Parece que el problema está resuelto. Sin embargo, por lo que sé, los nodos decidieron que es una buena idea crear un módulo de búfer y administrarlo en los enlaces C que crearon (a partir de una charla dada por Ryan Dahl). Creo que esto tiene que ver con cómo se realiza el almacenamiento en búfer a través de la red. Esto significa que ArrayBuffer aún no es un buen medio de datos para compartir entre el servidor y el navegador.

+1

No entiendo exactamente cuál es el problema. ¿Qué funcionalidad le interesa exactamente que no existe en el navegador? –

+0

Mis necesidades constan de dos cosas: 1. Maneje el búfer de la misma manera tanto en el servidor como en el navegador. 2. Soporta datos binarios. – qballer

+0

Use DataView y ArrayBuffer – Chiguireitor

Respuesta

8

browser-buffer emula Node's Buffer API en el navegador.

Está respaldado por Uint8Array, por lo que browser support es incompleto.

+0

Este es el tipo de respuesta que estoy buscando, es que todavía es muy inestable. – qballer

+0

Sí, hay muy poca actividad en el proyecto; parece que es el código experimental de alguien. Lo usaría como un buen punto de partida: tendrás que bifurcar y mejorar el código. – josh3736

2

Las cadenas integradas de JavaScript usan caracteres anchos en el interior. Para que puedan almacenar fácilmente un valor de 0 a 255 en cada posición del personaje. Esta es una característica del lenguaje JavaScript, por lo que debería funcionar igual en un navegador o en node.js.

Puede utilizar charCodeAt para extraer el valor de una posición particular en una cadena y fromCharCode para crear un personaje (que se puede añadir a una cadena) con un valor de 0 a 255.

Puede utilizar el varias funciones de cadena para manipular datos en esta forma. Puede crear constantes usando constantes de cadenas de JavaScript como esta "\x00\x12\x34\x56".

Cuestiones relacionadas