2011-05-11 18 views
24

El ejemplo canónico aquí es la API de Twitter. Comprendo conceptualmente cómo funciona la API REST, básicamente es solo una consulta a su servidor para su solicitud particular en la que luego recibe una respuesta (JSON, XML, etc.), excelente.Streaming API vs Rest API?

Sin embargo no estoy muy seguro de cómo una API de streaming funciona en segundo plano. Entiendo cómo consumirlo. Por ejemplo, con Twitter escuche una respuesta. A partir de la respuesta, escucha los datos y los tweets vienen en trozos. Acumule los trozos en un buffer de cadena y espere un avance de línea que signifique el final del Tweet. Pero, ¿qué están haciendo para que esto funcione?

Digamos que tenía un montón de datos y quería configurar una API de transmisión localmente para que otras personas en la red consumieran (al igual que Twitter). ¿Cómo se hace esto? ¿Qué tecnologías? ¿Es esto algo que Node JS podría manejar? Solo estoy tratando de entender lo que están haciendo para que esto funcione.

Respuesta

19

La API de transmisión de Twitter es básicamente una solicitud de larga ejecución que se deja abierta, los datos se ingresan cuando está disponible.

La consecuencia de esto es que el servidor tendrá que ser capaz de tratar con muchas conexiones HTTP abiertas simultáneas (una por cliente). Muchos servidores existentes no se manejan tan bien, por ejemplo, los motores de servlets Java asignan un Thread por solicitud que (a) puede ser bastante costoso y (b) alcanza rápidamente la configuración de max-threads normal y evita conexiones posteriores.

Como suponía, el modelo Node.js se ajusta a la idea de una conexión de transmisión mucho mejor que un modelo de servlet. Tanto las solicitudes como las respuestas se exponen como transmisiones en Node.js, pero no ocupan un hilo o proceso completo, lo que significa que usted puede continuar enviando datos a la transmisión mientras permanezca abierto sin inmovilizar recursos excesivos (aunque esto es subjetivo). En teoría, podría tener muchas respuestas concurrentes abiertas conectadas a un solo proceso y solo escribir a cada una cuando sea necesario.

Si no ha mirado ya la HTTP docs for Node.js podría ser útil.

También echaré un vistazo a technoweenie's Twitter client para ver cómo se ve el consumidor final de esa API con Node.js, the stream() function in particular.