Parece que tiene un problema con la carga del servidor, por lo que compararé las tecnologías pertinentes.
sondeo Ajax: Este es el más sencillo. Establece el bucle TimeTimeout cada 5 segundos más o menos para comprobar si hay nuevos mensajes de chat o si configura un iframe para volver a cargar. Cuando publica un mensaje, también devuelve mensajes nuevos, y las cosas no deberían desordenarse. El mayor inconveniente de este método es que es poco probable que realice una encuesta con la frecuencia correspondiente a la frecuencia con la que se publican los mensajes. O vas a sondear muy rápido, y harás muchas solicitudes adicionales, o sondearás muy despacio y obtendrás trozos de mensajes a la vez en lugar de obtenerlos en tiempo real. Este es, de lejos, el método más fácil.
push HTTP Esta es la idea de que el servidor debe decirle al cliente cuando hay mensajes nuevos, en lugar de molestar al cliente continuamente el servidor preguntando si hay ninguno nuevo todavía. Imagínese que los padres conducen y los niños preguntan "¿ya llegamos?", Puede hacer que los padres le digan al niño cuando lleguen allí.
Hay dos formas de simular esto y hacerlo de verdad. WebSockets, que mencionas, en realidad están creando una secuencia entre el cliente y el servidor y enviando datos en tiempo real. Esto es asombroso, y para 4 de cada 10 usuarios que tienen un navegador que puede hacerlo, estarán muy emocionados.Todos los demás tendrán una página rota. Lo siento. Tal vez en un par de años.
También puede falsificar tecnología de empuje con cosas como de sondeo largo. La idea es que pregunte al servidor si hay mensajes nuevos y el servidor no responde hasta que aparezca un nuevo mensaje o se haya alcanzado un límite preestablecido (30 segundos aproximadamente). Esto mantiene el número de solicitudes al mínimo, mientras se utilizan tecnologías web conocidas, por lo que la mayoría de los navegadores trabajarán con él. Tendrás una alta concurrencia de conexión, pero realmente no están haciendo nada, por lo que debería tener un costo de servidor demasiado alto.
He usado todo esto antes, pero terminé yendo con sondeo largo. Puede encontrar más información sobre cómo hacerlo aquí: How do I implement basic "Long Polling"?
http://caniuse.com/#search=websocket en 2015, los websockets son compatibles con todo de manera efectiva, excepto ie8 y ie9. : D – Kzqai