2010-12-06 90 views

Respuesta

8

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"?

+1

http://caniuse.com/#search=websocket en 2015, los websockets son compatibles con todo de manera efectiva, excepto ie8 y ie9. : D – Kzqai

1

Hay algunas maneras que dan los mensajes al cliente de inmediato:

  • HTML5 websockets
    • bueno porque se puede utilizar como si fueran tomas reales
    • malas porque sólo una algunos navegadores lo soportan
  • Sin fin-carga del marco
    • buena porque cada navegador es compatible
    • no tan fresco porque hay que hacer peticiones AJAX para enviar cosas
    • puede enviar comandos al cliente mediante la incorporación de <script> etiquetas en el contenido
      • el script se ejecuta inmediatamente, ¡también!
  • ...

Así que, en conclusión, elegiría la segunda manera.

+0

No está seguro de lo que es AJAX, pero no es difícil de enviar mensajes al servidor usando forma regular dentro de otro marco. –

+0

@ user205376: Ajax también es fácil, pero el socket es más fresco :) – thejh

+0

Puede usar un respaldo Flash para WebSocket para obtener una compatibilidad mucho mayor. Ver, por ejemplo, [gimite] (https://github.com/gimite/web-socket-js). – bobince

1

El enfoque típico es usar long polling. Aunque es mejor no hacer esto en PHP (PHP necesitará un proceso para cada conexión, lo que limita drásticamente el número de visitantes posibles a su sitio). En su lugar, use node.js. Es perfecto para chats.

2

Debe elegir sockets en lugar de AJAX Polling. Sin embargo, no hay mucho en cuanto a cómo puede integrar chats basados ​​en sockets con MySQL.

he hecho algunas pruebas y tienen un ejemplo básico de trabajo aquí: https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

Se hace uso de trinquete (http://socketo.me/) para la creación del servidor de chat en PHP.

Y usted puede enviar mensajes de chat a la base de datos mediante el envío de la JSON del servidor con la información de quién está conversando, (si por supuesto que tiene sesiones de usuario)