Algunas grandes respuestas de otros que cubren mucho terreno. Aquí tienes un poco más.
La única ventaja de WebSockets sobre complementos como Java Applets, Flash o Silverlight es que los WebSockets están integrados de forma nativa en los navegadores y no dependen de complementos.
Si con esto quiere decir que puede usar Java Applets, Flash o Silverlight para establecer una conexión de socket, entonces sí, eso es posible. Sin embargo, no lo ve implementado en el mundo real con demasiada frecuencia debido a las restricciones.
Por ejemplo, los intermediarios pueden cerrar ese tráfico y lo hacen. El estándar WebSocket fue diseñado para ser compatible con la infraestructura HTTP existente y, por lo tanto, es mucho menos propenso a ser interferido por intermediarios como firewalls y proxies.
Además, WebSocket puede usar los puertos 80 y 443 sin requerir puertos dedicados, nuevamente gracias al diseño del protocolo para ser lo más compatible posible con la infraestructura HTTP existente.
Esas alternativas de socket (Java, Flash y Silverlight) son difíciles de usar de forma segura en una arquitectura de origen cruzado. Por lo tanto, las personas que a menudo intentan usarlos de origen cruzado tolerarán las inseguridades en lugar de hacer el esfuerzo de hacerlo de forma segura.
También pueden requerir que se abran puertos "no estándar" adicionales (algo que los administradores detestan hacer) o archivos de políticas que deben administrarse.
En resumen, el uso de Java, Flash o Silverlight para la conectividad de sockets es lo suficientemente problemático como para que no lo vea implementado en arquitecturas serias con demasiada frecuencia. Flash y Java han tenido esta capacidad durante probablemente al menos 10 años y, sin embargo, no es frecuente.
El estándar WebSocket pudo comenzar con un enfoque nuevo, teniendo en cuenta esas restricciones y, con suerte, haber aprendido algunas lecciones de ellas.
Algunas implementaciones de WebSocket utilizan Flash (o posiblemente Silverlight y / o Java) como respaldo cuando no se puede establecer la conectividad de WebSocket (como cuando se ejecuta en un navegador antiguo o cuando interfiere un intermediario).
Si bien algún tipo de estrategia alternativa para esas situaciones es inteligente, incluso necesaria, la mayoría de los que usan Flash et al sufrirán los inconvenientes descritos anteriormente. No tiene por qué ser así, existen soluciones alternativas para lograr conexiones seguras con capacidad de origen cruzado utilizando Flash, Silverlight, etc., pero la mayoría de las implementaciones no lo harán porque no es fácil.
Por ejemplo, si confía en WebSocket para una conexión de origen cruzado, funcionará bien. Pero si luego ejecuta en un navegador antiguo o un firewall / proxy interfirió y confía en Flash, digamos, como su respaldo, le resultará difícil hacer esa misma conexión de origen cruzado. A menos que no le importe la seguridad, por supuesto.
Eso significa que es difícil tener una única arquitectura unificada que funcione para conexiones nativas y no nativas, a menos que esté preparado para trabajar bastante o ir con un marco que lo haya hecho bien. En una arquitectura ideal, no notaría si las conexiones fueran nativas o no; su configuración de seguridad funcionaría en ambos casos; su configuración de agrupación en clúster aún funcionaría; su planificación de capacidad aún se mantendría; y así.
La única ventaja de WebSockets sobre la transmisión http es que no tiene que hacer un esfuerzo para "comprender" y analizar los datos recibidos.
No es tan simple como abrir un flujo HTTP y sentarse mientras sus datos fluyen durante minutos, horas o más. Los diferentes clientes se comportan de manera diferente y tienes que gestionar eso. Por ejemplo, algunos clientes almacenarán los datos en búfer y no los enviarán a la aplicación hasta que se alcance algún umbral. Peor aún, algunos no pasarán los datos a la aplicación hasta que se cierre la conexión.
Por lo tanto, si envía varios mensajes al cliente, es posible que la aplicación cliente no reciba los datos hasta que se hayan recibido 50 mensajes de datos, por ejemplo. Eso no es demasiado en tiempo real.
Si bien la transmisión HTTP puede ser una alternativa viable cuando WebSocket no está disponible, no es una panacea. Se necesita una buena comprensión para trabajar de manera sólida en las tierras baldías de la Web en condiciones del mundo real.
¿Hay otras diferencias significativas que me falten?
Hay otra cosa que nadie ha mencionado todavía, así que la mencionaré.
El protocolo WebSocket fue diseñado para ser una capa de transporte para protocolos de nivel superior. Si bien puede enviar mensajes JSON o lo que sea directamente a través de una conexión WebSocket, también puede llevar protocolos estándar o personalizados.
Por ejemplo, podría hacer AMQP o XMPP a través de WebSocket, como ya lo ha hecho la gente. Por lo tanto, un cliente podría recibir mensajes de un corredor de AMQP como si estuviera conectado directamente al corredor en sí (y en algunos casos lo está).
O si tiene un servidor existente con algún protocolo personalizado, puede transportarlo a través de WebSocket, extendiendo así ese servidor de fondo a la Web. A menudo, una aplicación existente que se ha bloqueado en la empresa puede ampliar su alcance utilizando WebSocket, sin tener que cambiar la infraestructura de back-end.
(Naturalmente, querrá poder hacer todo eso de forma segura, así que consulte con el proveedor o el proveedor de WebSocket).
Algunas personas se han referido a WebSocket como TCP para la Web. Porque al igual que TCP transporta protocolos de nivel superior, también lo hace WebSocket, pero de una manera compatible con la infraestructura web.
Entonces, si bien siempre es posible enviar mensajes JSON (o lo que sea) directamente a través de WebSocket, también se deben considerar los protocolos existentes. Porque para muchas cosas que desea hacer, probablemente ya se ha pensado en un protocolo para hacerlo.
Lo siento si estoy volviendo a hacer o combinando muchas de las preguntas que ya están en SO en una sola pregunta, pero solo quiero entender perfectamente toda la información que hay en SO y en la web con respecto a estos conceptos.
Esta fue una gran pregunta, ¡y todas las respuestas han sido muy informativas!