2011-01-12 26 views
8

Actualmente estoy compilando una aplicación en tiempo real usando Node. Estoy usando socket.io para potenciar mis interacciones en tiempo real, pero he cargado jQuery, así que tengo AJAX disponible para mí. Inicialmente utilicé socket.io para todas mis comunicaciones entre el servidor y el cliente.Con websockets, ¿hay un lugar para AJAX?

Estoy empezando a pensar que AJAX podría ser más adecuado para ciertos casos como hacer transacciones RESTful asincrónicamente, porque no tengo que escribir un caso de mensaje separado en mi socket para manejar cada nueva transacción y escribir el Enrutamiento RESTful.

Me pregunto si estoy aprendiendo algo o si es mejor utilizar sockets para el rendimiento o algo más en lo que no estoy pensando.

Gracias! Matt Mueller

Respuesta

10

Sí, WebSockets (RFC 6455) y Ajax son bastante diferentes y sirven para diferentes propósitos.

Como dices, con Ajax puedes hacer peticiones RESTful. Esto significa que puede aprovechar la infraestructura HTTP existente, como p. Ej. proxies a caché solicitudes y uso conditional get requests. La solicitud de Ajax puede ser bastante pesada ya que cada solicitud de Ajax contiene encabezados HTTP e incluye cookies.

WebSockets está diseñado para una comunicación bidireccional de baja latencia. Por diseño, WebSockets tiene muy poca sobrecarga en cada mensaje. P.ej. Los mensajes de WebSockets no tienen que incluir encabezados HTTP, y en el futuro se pueden usar para VoIP y para la transmisión en ambas direcciones.

Otra diferencia es que Ajax se puede utilizar con sin estado servidores. P.ej. si tiene su carga web balanceada con varios servidores, cualquier servidor puede manejar una solicitud Ajax, incluso después de reiniciar (o actualizar). Websocket está "conectado" y utiliza un servidor stateful, por lo que puede ser más difícil utilizar varios servidores con él.

También hay eventos enviados por el servidor, que son similares a WebSockets, en que el servidor puede enviar datos al cliente (lo que no se puede hacer con Ajax sin hacks (por ejemplo, cometa)) y también puede manejar reconexiones. Pero es solo para mensajes en una dirección (de servidor a cliente). Ver HTML5 Server-Side Event: EventSource vs. wrapped WebSocket.

+1

Respuesta absolutamente increíble. ¡Muchas gracias! – Matt

-1

Esas son dos tecnologías completamente diferentes y podrían usarse juntas: con AJAX la solicitud es iniciada por el cliente, mientras que con WebSockets la solicitud es iniciada por el servidor para enviar algunos datos al cliente.

+0

Sí, pero igual puede hacer que el cliente solicite datos utilizando WebSockets. Solo tiene que diseñar su propio protocolo de solicitud/respuesta. –

+0

Como mencionó Matthew, los websockets son comunicaciones bidireccionales donde cada lado puede iniciar una solicitud. AJAX debe ser iniciado por el cliente. – Matt

Cuestiones relacionadas