websockets tutorial socket nodejs example javascript rest node.js websocket

javascript - tutorial - API de Websocket para reemplazar API REST?



websocket php (8)

Estoy pensando en pasar a una API de WebSocket para todas las funciones del sitio

No. No deberías hacerlo. No hay daño si usted apoya ambos modelos. Utilice REST para comunicaciones unidireccionales / solicitudes simples y WebSocket para comunicación bidireccional, especialmente cuando el servidor desea enviar notificaciones en tiempo real.

WebSocket es un protocolo más eficiente que RESTful HTTP pero RESTful los puntajes HTTP sobre WebSocket en áreas inferiores.

  1. Los recursos Crear / Actualizar / Eliminar se han definido bien para HTTP. Debe implementar estas operaciones a bajo nivel para WebSockets.

  2. Las conexiones WebSocket se escalan verticalmente en un único servidor donde las conexiones HTTP se escalan horizontalmente. Existen algunas soluciones patentadas no basadas en estándares para la escala horizontal de WebSocket.

  3. HTTP viene con muchas características buenas como almacenamiento en caché, enrutamiento, multiplexación, gzipping, etc. Estas deben construirse sobre Websocket si elige Websocket.

  4. Las optimizaciones de los motores de búsqueda funcionan bien para las URL HTTP.

  5. Todos los servidores proxy, DNS y firewall aún no son totalmente conscientes del tráfico de WebSocket. Permiten el puerto 80 pero pueden restringir el tráfico al husmearlo primero.

  6. La seguridad con WebSocket es un enfoque de todo o nada.

Echa un vistazo a este article para más detalles.

Tengo una aplicación cuya función principal funciona en tiempo real, a través de websockets o larga encuesta.

Sin embargo, la mayor parte del sitio está escrito de manera RESTful, lo que es bueno para aplicaciones y otros clientes en el futuro. Sin embargo, estoy pensando en la transición a una API de websocket para todas las funciones del sitio, lejos de REST. Eso me facilitaría la integración de funciones en tiempo real en todas las partes del sitio. ¿Esto haría más difícil crear aplicaciones o clientes móviles?

Descubrí que algunas personas ya están haciendo cosas como esta: SocketStream


¿Quiero actualizaciones del servidor?

  • Sí: Socket.io
  • Sin descanso

Las desventajas de Socket.io son:

  • Escalabilidad: WebSockets requiere conexiones abiertas y una configuración de Ops muy diferente a la escala web.
  • Aprendizaje: no tengo tiempo ilimitado para mi aprendizaje. ¡Las cosas tienen que hacerse!

Todavía usaré Socket.io en mi proyecto, pero no para los formularios web básicos que REST hará muy bien.


Consideraría usar ambos. Cada tecnología tiene su mérito y no existe una solución única para todos.

La separación del trabajo va de esta manera:

1) WebSockets sería el método principal de una aplicación para comunicarse con el servidor donde se requiere una sesión. Esto elimina muchos hacks que se necesitan para los navegadores más antiguos (el problema es el soporte para los navegadores más antiguos que eliminarán esto)

2) La API RESTful se utiliza para llamadas GET que no están orientadas a la sesión (es decir, no se necesita autenticación) que se benefician del almacenamiento en caché del navegador. Un buen ejemplo de esto serían los datos de referencia para los menús desplegables utilizados por una aplicación web. Sin embargo. puede cambiar un poco más a menudo que ...

3) HTML y Javascript. Estos comprenden la interfaz de usuario de la aplicación web. En general, estos se beneficiarían si se los coloca en un CDN.

4) Los servicios web que utilizan WSDL siguen siendo la mejor forma de comunicación entre empresas y de nivel empresarial, ya que proporcionan un estándar bien definido para el envío de mensajes y datos. Principalmente descargarías esto a un dispositivo de Datapower para realizar un proxy a tu manejador de servicios web.

Todo esto sucede en el protocolo HTTP que da uso de sockets seguros a través de SSL.

Sin embargo, para la aplicación móvil, los websockets no pueden volver a conectarse a una sesión desconectada ( cómo volver a conectarse a websocket después de una conexión cercana ) y administrar eso no es trivial. Por lo tanto, para las aplicaciones móviles, aún recomendaría la API REST y las encuestas.

Otra cosa a tener en cuenta cuando se usa WebSockets vs REST es la escalabilidad. Las sesiones de WebSocket todavía son administradas por el servidor. La API RESTful cuando se realiza correctamente no tiene estado (lo que significa que no hay un estado del servidor que deba gestionarse), por lo que la escalabilidad puede crecer de forma horizontal (lo que es más barato) que verticalmente.


El único problema que puedo utilizar con TCP (WebSockets) como estrategia principal para la entrega de contenido web es que hay muy poco material de lectura sobre cómo diseñar la arquitectura y la infraestructura de su sitio web mediante TCP.

Entonces no puedes aprender de los errores de otras personas y el desarrollo va a ser más lento. Tampoco es una estrategia "probada y probada".

Por supuesto, también perderá todas las ventajas de HTTP (Ser apátrida y el almacenamiento en caché son las mayores ventajas).

Recuerde que HTTP es una abstracción para TCP diseñada para servir contenido web.

Y no olvidemos que los motores de búsqueda y SEO no hacen websockets. Entonces puedes olvidarte de SEO.

Personalmente, recomendaría no hacerlo ya que hay mucho riesgo.

No use WS para servir sitios web, úsela para servir aplicaciones web

Sin embargo, si usted tiene un juguete o un sitio web personal, hágalo . Pruébalo, sé vanguardista. Para una empresa o empresa, no se puede justificar el riesgo de hacerlo.


Esa no es una buena idea. El estándar aún no está finalizado, el soporte varía según los navegadores, etc. Si desea hacer esto ahora, necesitará recurrir al flash o al sondeo largo, etc. En el futuro, probablemente todavía no hará un Mucho sentido, ya que el servidor tiene que admitir dejar conexiones abiertas a cada usuario. La mayoría de los servidores web están diseñados en su lugar para sobresalir al responder rápidamente a las solicitudes y cerrarlas lo más rápido posible. Demonios, incluso su sistema operativo debería ajustarse para tratar con un gran número de conexiones simultáneas (cada conexión usa más puertos y memoria efímeros). Limítese a usar REST para la mayor parte del sitio que pueda.


HTTP REST y WebSockets son muy diferentes. HTTP no tiene estado , por lo que el servidor web no necesita saber nada, y usted obtiene el almacenamiento en caché en el navegador web y en los servidores proxy. Si usa WebSockets, su servidor se está volviendo estable y necesita tener una conexión con el cliente en el servidor.

Comunicación petición-respuesta vs Push

Use WebSockets solo si necesita PUSH datos del servidor al cliente, ese patrón de comunicación no está incluido en HTTP (solo por medio de soluciones). PUSH es útil si los eventos creados por otros clientes deben estar disponibles para otros clientes conectados, por ejemplo, en juegos donde los usuarios deben actuar sobre el comportamiento de otros clientes. O si su sitio web está monitoreando algo, donde el servidor envía datos al cliente todo el tiempo, por ejemplo, mercados de valores (en vivo).

Si no necesita PULSAR datos del servidor, generalmente es más fácil usar un servidor REST HTTP sin estado. HTTP usa un patrón simple Request-Reply comunicación Request-Reply .


Los transportes basados ​​en WebSockets (o larga encuesta) en su mayoría sirven para comunicación (casi) en tiempo real entre el servidor y el cliente. Aunque existen numerosos escenarios en los que se requieren este tipo de transportes, como el chat o algún tipo de feeds en tiempo real u otras cosas, no todas las partes de alguna aplicación web deben estar necesariamente conectadas bidireccionalmente con el servidor.

REST es una arquitectura basada en recursos que se entiende bien y ofrece sus propios beneficios sobre otras arquitecturas. Los WebSockets se inclinan más a transmisiones / transmisiones de datos en tiempo real, lo que requeriría crear algún tipo de lógica basada en servidor para priorizar o diferenciar entre recursos y fuentes (en caso de que no desee usar REST).

Supongo que finalmente habrá más frameworks céntricos de WebSockets como SocketStream en el futuro cuando este transporte esté más extendido y mejor entendido / documentado en forma de entrega SocketStream de tipo de datos / formulario. Sin embargo, creo que esto no significa que deba / deba reemplazar el REST simplemente porque ofrece una funcionalidad que no es necesariamente necesaria en numerosos casos de uso y escenarios.


No decir que las otras respuestas aquí no tienen mérito, hacen algunos buenos puntos. Pero voy a ir en contra del consenso general y estoy de acuerdo con usted en que moverse a websockets para funciones que no sean solo en tiempo real es muy atractivo.

Estoy considerando seriamente mover mi aplicación de una arquitectura RESTful a más de un estilo RPC a través de websockets. Esta no es una "aplicación de juguete", y no estoy hablando solo de funciones en tiempo real, entonces sí tengo reservas. Pero veo muchos beneficios al seguir esta ruta y siento que podría llegar a ser una solución excepcional.

Mi plan es usar DNode , SocketIO y Backbone . Con estas herramientas, mis modelos y colecciones Backbone se pueden pasar de / a cliente y servidor simplemente llamando a funciones de estilo RPC. No más administración de extremos REST, serialización / deserialización de objetos, etc. Todavía no he trabajado con socketstream, pero vale la pena echarle un vistazo.

Todavía tengo un largo camino por recorrer antes de poder decir definitivamente que esta es una buena solución, y estoy seguro de que no es la mejor solución para cada aplicación, pero estoy convencido de que esta combinación sería excepcionalmente poderosa. Admito que hay algunos inconvenientes, como perder la capacidad de almacenar recursos en caché. Pero tengo la sensación de que las ventajas serán mayores que ellos.

Me interesaría seguir su progreso explorando este tipo de solución. Si tienes algún experimento de github, por favor apunta a ellos. Todavía no tengo ninguno, pero espero que pronto.

A continuación hay una lista de enlaces para leer más tarde que he estado recopilando. No puedo garantizar que valgan la pena, ya que solo he robado muchos de ellos. Pero con suerte, algunos ayudarán.

Gran tutorial sobre el uso de Socket.IO con Express. Expone sesiones express a socket.io y analiza cómo tener diferentes salas para cada usuario autenticado.

Tutorial en node.js / socket.io / backbone.js / express / connect / jade / redis con autenticación, hosting de Joyent, etc.

Tutorial sobre el uso de Pusher con Backbone.js (usando Rails):

Aplicación de compilación con backbone.js en el cliente y node.js con express, socket.io, dnode en el servidor.

Usando Backbone con DNode: