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
- El navegador abre la página indicada.
- Luego de que la página es cargada, JavaScript establece una conexión persistente con el servidor Comet.
- 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.
- El servidor Comet utiliza la conexión abierta con len navegador y envía el mensaje.
- 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.