Crear un Chat con Comet y PHP

0

En este tutorial veremos cómo crear un chat con Comet y PHP.

Comet es una librería la cual nos permitirá comunicarnos con un servidor web utilizando pedidos HTTP que no terminan de enviar una respuesta y así nos permiten mantener una comunicación fluida con el navegador web.

El diagrama a continuación indica el flujo de la data con el uso de Comet

imagen1

  1. El navegador abre la página indicada.
  2. Luego de que la página es cargada, JavaScript establece una conexión persistente con el servidor Comet.
  3. Mientras la página siga abierta, nuestro servidor puede enviar cualquier mensaje al navegador. Para realizar esto, utiliza un API de envío de mensajes el servidor Comet.
  4. El servidor Comet utiliza la conexión abierta con len navegador y envía el mensaje.
  5. El API JavaScript recibe el mensaje y llama al callback indicado.

Para nuestro servidor Comet, estaremos utilizando el servidor gratuito:

comet-server.ru
  • El flujo en el código que veremos a continuación funcionará de la siguiente forma:
  • El usuario visita la página e inmediatamente se suscribe a un API JS para obtener mensajes instantáneos de un canal de chat.
  • Para enviar un mensaje un pedido en AJAX es utilizado el cual envía un mensaje de texto a un servidor PHP
  • PHP procesa el mensaje recibido y lo guarda en una base de datos
  • Luego PHP se conecta al servidor Comet y le envía un pedido para enviar el mensaje al canal
  • El servidor Comet recibe el mensaje de PHP y envía a todos los suscritos al canal.

El código HTML, JS y AJAX para lograr el flujo es el siguiente:

<!DOCTYPE HTML>
<html>
<head>
<script src="//comet-server.ru/CometServerApi.js"></script>
<script src="//comet-server.ru/doc/CometQL/simplePhpChat/jquery.min.js">
</script>
</head>
<body>

<div
   id="textHolder"
   style="margin-top:10px;border:1px solid #000;padding:10px;"
></div>
<hr>
<input type="text" id="msgText" placeholder="Message text">
<input type="button" value="Send"  onclick="sendMsg();">

<script type="text/javascript">
$(document).ready(function(){

    CometServer().subscription("ChatPHPSimple", function(event){
        console.log(
            Recibimos el mensaje.",
            event.data,
            event
        );
        $("#textHolder").html( $("#textHolder").html() +"<hr>"+event.data);
    })

    /** 
     * Connecting to a server comets. To be able to receive commands.
     * dev_id your public identity of the developer.
     */
    CometServer().start({dev_id:15 })
})

function sendMsg(){

	var text = $("#msgText").val();
	
    jQuery.ajax({
        url: "//comet-server.ru/doc/CometQL/simplePhpChat/sendMsgToChat.php",
        type: "GET",
        data:"text="+encodeURIComponent(text),
        success: function(){
            $("#msgText").val('');
        }
    });
}
</script>
</body>
</html>

Él código PHP necesario es el siguiente:

// Nos conectamos a comet-server.ru con nuestro user y pass. Puede obtenerlo al registrarse en aquella página
$link = mysqli_connect(
            "app.comet-server.ru", "15", 
            "lPXBFPqNg3f661JcegBY0N0dPXqUBdHXqj2cHf04PZgLHxT6z55e20ozojvMRvB8",
            "CometQL_v1"
        );

//enviamos el mensaje al canal
mysqli_query(
    $link,
    "INSERT INTO
        pipes_messages
        (name, event, message)
    VALUES
        ('ChatPHPSimple',
         '',
         '".mysqli_real_escape_string($link,htmlspecialchars($_GET['text']))."'
        );"
);

Esta es una manera muy sencilla de implementar un servidor de chat basado en Comet.

Comparte este post.
Artículos Recomendados Para Tí:

Escribe tu comentario