Ive sido google esta y mirando alrededor de stackoverflow por un tiempo, pero no ha encontrado una solución - de ahí el puesto. Estoy jugando con Node. js y WebSockets por curiosidad. Estoy tratando de transmitir algunos datos binarios (un mp3) al cliente. Mi código hasta ahora está por debajo, pero obviamente no funciona como se pretende. Sospecho que mi problema es que en realidad no estoy enviando datos binarios desde el servidor y quisiera alguna aclaración / ayuda. Heres mi servidor. La llamada a descodificar siempre termina en la devolución de llamada de error. Estoy asumiendo que esto es porque está recibiendo malos datos. Así que mi pregunta es cómo corregir correctamente el archivo como binario He arreglado este problema con una combinación de eliminar la codificación: parámetro binario de las opciones pasadas a createReadStream () y la solución en. Según algunos de mis comentarios, cuando actualizé las opciones de createReadStream, el primer fragmento estaba jugando, pero todos los demás fragmentos estaban ejecutando la devolución de llamada onError de decodeAudioData (). La solución en el enlace anterior fijó esto para mí. Parece que decodeAudioData () es un poco exigente en cuanto a cómo los trozos que recibe debe ser formateado. Deberían ser trozos válidos aparentemente. En una pregunta anterior parecía que la única manera de hacer lecturas de acceso aleatorio desde un archivo en node. js es usar fs. createReadStream () con su fd opcional. comienzo. Y campos finales. Esto funcionó bien en mis pruebas más simples. Pero en mi proyecto necesito leer repetidamente de diversos offsets de un archivo binario. Esto falló de una manera extraña por lo que se me ocurrió un caso de prueba mínima: El evento final interno nunca se recibe. Ive implementado este proyecto antes en Perl e incluso en JavaScript como una extensión de Firefox, pero su probar difícil en el nodo. (El cierre externo se recibe de forma inconsistente, pero no necesito adjuntar código a ello. Esto también es una prueba para saber si puedo empezar a usar node. js como un lenguaje de scripting de propósito general. El problema es que el ReadStream externo cerrará el fd después de que se utilice, por lo que reutilizarlo en el segundo ReadStream fallará. El nodo más nuevo inestable realmente tiene opciones de autoClose para ReadStreams pero eso no es parte de estable todavía. La verdadera respuesta es que la información dada a usted en su pregunta anterior es incorrecta. CreateReadStream se implementa utilizando todas las API públicas, por lo que no hay nada que pueda hacer que no pueda hacer demasiado. En este caso, sólo puede utilizar fs. read con su argumento de posición. Respondió 24 de Diciembre a las 4: 49Leer texto y datos binarios con flujos legibles de Node. js Este tutorial explicará el uso y la creación de nodos. js flujos legibles: Información de la versión Autor: Jeff Barczewski Publicado: 3 de agosto de 2013 Tags: nodejs, streams Nivel: Intermedio Requisitos previos: cripto, eventos, instalación de los módulos npm Node. js v0.10 (el último estático es v0.10.15 a partir de esta escritura), pero los arroyos han sido generalmente una parte de Node. js desde sus primeros días Streams2 puede ser utilizado Con versiones anteriores del nodo mediante el uso del módulo npm readable-stream Consumir o usar flujos legibles Ejemplo simple de leer un archivo y repetirlo a stdout: Creación de un resumen sha1 de un archivo y eco del resultado a stdout (similar a shasum): Los datos Evento se dispara en la secuencia legible para cada fragmento de datos, por lo que actualizar el resumen con cada trozo a medida que vaya, finalmente el evento final se dispara cuando la secuencia ha terminado para que pueda dar salida al resultado final. Tenga en cuenta que cada vez que llama a. on () para registrar un oyente, devuelve el flujo original para poder encadenar métodos fácilmente. Con Node. js 0.10 hay una mejor manera de consumir los flujos. La interfaz legible facilita el trabajo con los flujos, especialmente los flujos en los que desea hacer otras cosas entre crear un flujo y usar el flujo. Estos flujos legibles más recientes son arroyos de tracción en los que solicita los datos cuando se lee para él en lugar de tener los datos empujados a usted. La clave para entender este ejemplo es que con la nueva interfaz de Streams2 Readable, se emitirá un evento legible tan pronto como los datos estén disponibles para ser leídos y se puede llamar. read () para leer fragmentos de la misma. Una vez que no hay más datos disponibles. Read () devuelve null, pero entonces se vuelve a activar otro evento legible cuando los datos están disponibles nuevamente. Esto continúa hasta el final del archivo cuando el final se dispara como antes. Producción de una secuencia legible Para usar flujos con el sistema de archivos o desde http, puede utilizar los métodos core fs y http para construir una secuencia, pero ¿cómo crearía su propia secuencia y la rellenaría con datos? Esto podría ser datos de una base de datos o De cualquier cantidad de fuentes. Aquí hay un ejemplo de creación de una secuencia legible que se genera a partir de datos binarios aleatorios, y luego la hash como antes. Esto sería útil para crear flujos para pruebas: Nota: después de que read () se llame, debemos continuar leyendo hasta que terminemos o hasta que push () devuelva false. Utilizar Streams2 con versiones anteriores de Node. js Si desea hacer que este código funcione con Node. js más antiguo que 0.10, puede incluir una dependencia para readable-stream en su package. json y cambiar la línea 5 para leer: Esto usará el nativo Flujo legible si la versión de Node. js es 0.10 y si no, entonces cargará el módulo polifill readable-stream y lo usará desde allí. Pausa / reanudación de la secuencia y Streams2 Dado que las secuencias a veces pueden proporcionar datos más rápidamente de lo que una aplicación puede consumir, las secuencias incluyen la posibilidad de pausar y los datos se almacenan en búfer hasta que se reanude la secuencia. Antes de los streams2, tendría que prestar mucha atención a los métodos de pausa y reanudación, así como almacenar en búfer los datos hasta que se reanude. Sin embargo, Readable de streams2 (Node. js 0.10 o mediante el paquete de flujo de lectura) implementa que la funcionalidad para usted y los streams se detienen automáticamente hasta que se llama a. read (). Otra situación en la que debe preocuparse acerca de la pausa y la reanudación es si su código de consumo utiliza la interfaz de estilo de inserción antigua llamando. on (39data39, escucha). Esto pone el flujo en modo de compatibilidad hacia atrás y tendrías que llamar a. pause () y. resume () para controlar la velocidad de los datos que llegan a tu aplicación. Consulte los documentos de API de Stream para obtener detalles si está utilizando la interfaz anterior en su código. Corrientes de objetos Inicialmente, cuando se introdujeron flujos, la API oficial indicaba que los fragmentos de datos que se estaban transmitiendo serían Buffers o cadenas, sin embargo muchos usuarios encontraron que era genial poder transmitir objetos también. Streams2 en Node. js 0.10 agregó un modo de objeto a los flujos para formalizar cómo debería funcionar. Cuando está en modo objeto. Read (n) simplemente devuelve el siguiente objeto (ignorando el n). Para cambiar una secuencia en modo objeto, establezca la propiedad objectMode en true en las opciones utilizadas para crear la secuencia Readable. De esta manera, puede utilizar objetos en secuencias con la misma facilidad con la que puede utilizar Buffers y strings, pero la única limitación es que los objetos Pase no puede ser nulo ya que indicará que el flujo ha terminado. Los flujos legibles de Node. js son flexibles y simples Los flujos legibles de Node. js son fáciles de consumir e incluso fáciles de construir. No sólo puede transmitir datos binarios y de cadena, sino también objetos y aprovechar la funcionalidad de flujo. Espero que haya disfrutado de este recorrido rápido de flujos legibles, avíseme si tiene alguna pregunta. Para más información Sígueme Comparte esta página
No comments:
Post a Comment