Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Logica de un chat con PHP y MySQL
#1
Bombilla 
Buenas, todos se preguntarán, ¿Como hago un chat usando solo php y mysql (y algo de ajax...)?

Aqui lo que buscaban...

Primero explicaré la logica basica y luego haré un ejemplo en codigo ;D, aqui vamos...

Existen algunos chats que usan el "Polling", estos chats solo sobrecargan el servidor y cuando hay mas de 10 usuarios deja de ser un chat para convertirse en un DDoS... =(

Polling es cuando haces REQUESTS constantemente al servidor... cada 1-5 segundos... eso es polling, un chat con una recarga de 1 segundo no aguantará mas de 5 usuarios, imaginense, con 5 personas el servidor recibe requests cada 200ms, con 10 personas cada 100ms y con 20 personas cada 50ms, siendo generalmente la latencia servidor-cliente de aproximados 80-300ms, ¡UN CAOS!

a diferencia del chat que vamos a hacer a contunuación, se envia 1 request al servidor, cuando este detecta que hay cambios en la base de datos este mismo da una respuesta y se repite el ciclo, si no hay ningun cambio en 20-30 segundos, se relentiza el ciclo de request a la base de datos, consumiendo minimos recursos en el sevidor....

Bien... Ahora sigue el codigo con explicación...

---------PHP---------



Código PHP:
<?php
set_time_limit
(0);//Hacemos que el tiempo limite de respuesta sea infinito
$con mysql_connect("localhost","root","pass");//conectamos a la base de datos
$db "labs";
$sql "select * from delay_test";
$res mysql_db_query($db,$sql,$con);//realizamos la consulta
$num_rows1 mysql_num_rows($res);//guardamos el numero de rows en una variable
$i=1;
while(
$i==1){//hacemos un ciclo "infinito"
sleep(1);//retrazamos el procesamiento por 1 segundo
$res mysql_db_query($db,$sql,$con);//ya que estamos dentro del bucle podemos hacer otra consulta...
$num_rows2 mysql_num_rows($res);//guardando el numero de rows en OTRA variable
if($num_rows1 != $num_rows2){//Ahora... si el numero de rows ha cambiado entonces...
$i 2;//terminamos el bucle
//echo $num_rows2;
regresar_flujo($res);
}
}
////_____________________________________________________//
function regresar_flujo($res){
while(
$row mysql_fetch_array($res)){
echo 
$row['data_input'];
echo 
"<br />";
}
}
?>
Ahora la parte de PHP y AJAX
Código PHP:
//Lo siguiente solo realiza una vez la consulta, pero, puedes volver a realizarla cada vez que el servidor de respueste ;D
<html>
<
head>
<
title>
Test de delay time
</title>
<
script type="text/javascript">
function 
initiateLoop(){
var 
xmlhttp;
if(
window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("XMLHTTP");
}
xmlhttp.open("GET","delay_time.php",true);//consulta al anterior archivo...
xmlhttp.send();
xmlhttp.onreadystatechange=function(){
if(
xmlhttp.readyState == && xmlhttp.status == 200){
document.getElementById('rCont1').innerHTML xmlhttp.responseText;
//y aqui podemos volver a repetir la consulta ;D
}
}
}
</
script>
</
head>
<
body onLoad="setTimeout(initiateLoop,1000);">
<
div id="rCont1">
<?
php 
$con 
mysql_connect("localhost","root","pass");
$db "labs";
$sql "select * from delay_test";
$res mysql_db_query($db,$sql,$con);
while(
$row mysql_fetch_array($res)){
echo 
$row['data_input'];
echo 
"<br />";
}
?>
</div>
</body>
</html> 


Eso fue todo y no olvides visitar Programadores Latinoamerica
#2
editado el post para hacerlo mas atractivo y seguro Guiño Procura envolver los códigos en sus respectivos [mycode]
WWW
#3
Esta muy bien la verdad es que quiero llegar ya al php, pero por el momento estoy aprendiendo css para combinarlo con html


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Problema conexion remota mysql efbsfcd 2 85 07-07-2017, 07:19 AM
Último mensaje: efbsfcd
  [Tutorial] Pasar MySQL a MySQLi[POO] amner 6 231 03-05-2017, 02:05 AM
Último mensaje: ReyNexo23
  Como subir Archivos, Imagenes PHP MysQL gassip 0 612 24-10-2016, 06:59 AM
Último mensaje: gassip
  [Tutorial] Pasar base de datos MySQL por SSH FullPirata 1 207 11-10-2016, 04:12 PM
Último mensaje: efbsfcd
  falla conexion a mysql [email protected] 4 411 01-09-2016, 06:52 AM
Último mensaje: easy english
  Subir multiples archivos o imágenes al servidor y guardarlas con PHP y MySQL cmascreativo 1 329 18-02-2016, 09:55 PM
Último mensaje: index
  [Aporte] Codigo para renombrar tabla MySQL gassip 3 283 23-12-2015, 08:10 AM
Último mensaje: AbaddonOrmuz
  Solucionado: Problema al conectar con base de datos remota mysql efbsfcd 10 745 21-07-2015, 02:23 PM
Último mensaje: Kevin9908
  [PHP+PDO+MYSQL] Conectandose a una base de datos (BD) Kevin9908 0 419 03-07-2015, 03:03 PM
Último mensaje: Kevin9908
  [PHP+MYSQL] Conectandose a una base de datos (BD) aperpen 6 666 01-07-2015, 03:11 PM
Último mensaje: d0rag0n



Usuarios navegando en este tema: 1 invitado(s)