Interesante sin duda alguna como dice el compañero
waldragon
eh probado lo que he expuesto anteriormente tal vez no con millones de usuarios como lo haria FB u otras RS... pero si con miles... lo que no estoy seguro es si eran servidores compartidos o dedicados... e igual estaba basado Apache...
Como he expuesto anteriormente y hasta donde sé es imposible que los datos lleguen directamente al otro usuario como pasaria con los sockets...
recalco.. a no ser.. que exista una aplicacion intermediaria... pues vamos.. si no puedes.. no quieres.. no necesitas.. una aplicacion intermediaria.. estoy seguro que esta solución te vendria bien...
bueno.. antes que nada
waldragon debeis entender las pautas que conforman la estructura de este tipo de sistemas..
- He comentado la importancia de los listeners un punto clave sin duda... se encarga de verificar si hay nuevo contenido para enviar o recibir.. la peticion de este proceso es de 1 bit... como veras... es lo minimo que puedes usar en recurso.. 1 bit es donde parte todo dato...
- Tambien necesitas la presencia de AJAX... metodo principal que se encargará de refresacar en tu página ÚNICAMENTE lo necesario...
te recomiendo aprender un poquito de jQuery para facilitarte la vida en la programación...
pues bién...
Código Javascript
:
Ver originalvar MyDocument=$('document');
var keyCode;
var Attr={};
MyDocument.ready(function(){
var MyFunction=$('#BtnEnter');//inicializamos para usar el evento enter en el botón
MyFunction.click(SUBMIT);
$(ducument).keypress(function(e)){
if(e.keyCode == 13){
SUBMIT();
}
}
Attr.txt = '';
Attr.Counter = 0;
Attr.listen = setInterval('LISTEN();', 1000);
});
function SUBMIT(){
Attr.txt = $('TxtBoxSendText');//Obtenemos el valor de la caja de texto
_$().Ajax({
Method:'POST',//metodo request
AtttachFile:'StrQuery.php',//archivo a explorar
Args:'SetNewContent = 1',//variable que se envia, para declarar accion en el server
callback:function(){//funcion de retorno
if(this.responseText){
if(Attr.Counter == 0){// validamos, si es 0 significa que es el primer msj que se muestra
$('#BoxChat').html('<div id="thisText0">'+Attr.txt+'</div>');//imprimimos el primer msj dentro del div BoxChat
Attr.Counter++; //aumentamos el contador para saber despues de que div imprimimos
}else{//si no es 0 el counter imprimimos abajo del ultimo msj que se mostró
$('#thisText'+(Attr.Counter - 1)).append('<div id="thisText'+Attr.Counter+'">'+Attr.txt+'</div>');
Attr.Counter++; //aumentamos el contador para saber despues de que div imprimimos
}
alert('enviado')
}
}
})
}
function LISTEN(){
_$().Ajax({
Method:'POST',//metodo request
ContainerAXS:'#thisText'+(Attr.Counter - 1) +'.append', // establece el elemento y/o ubicacion donde se imprimira el nuevo contenido.. en este caso abajo del último div thisText + Attr.Counter... solo en caso de que haya contenido para imprimir...
AttachFile:'StrQuery.php', //Archivo a explorar
Args:'GetNewContent = 1', //variable que se envia, para declarar accion en el server
Loader:true, //muestra un msj preestablecido o personalizado donde se cargará el nuevo contenido (opcional)
callback:function(){
if(this.responseText != 0){ //si es distinto de 0 hubo respuesta del server en nuevo contenido
Attr.Counter++; //aumentamos el contador.. para luego saber despues de cual div imprimir...
alert('recibido');
}
}
})
}
ok.. como veras mi amigo.. es un ejemplo pues bástante sencillo en cuanto a visibilidad.. ya que todo los parametros los tiene el método _$().Ajax internamente...
indudablemente.. si lo copias así tal cual no te funcionará eso es debido a que necesitas mi libreria donde tengo ese método.. pero descuida.. igual lo puedes hacer con Ajax de jQuery.. el punto que te quiero resaltar.. es el hecho del listener.. que como vez.. en este caso.. enbia 1 paramentro en bits... es obvio que si recibe respuesta pues la data aumenta.. depende del contenido que tenga que mostrar...
resalto.. que como los datos se van imprimiendo en
"escalera" tiene que haber un contenedor.. en este caso
"ChatBox" y dentro de el se va imprimiendo
<div id="thisText1">, <div id="thisText2">, <div id="thisText3"> <div id="thisText4">, <div id="thisText5"> etc.. etc.. ese es el trabajo del Attr.Counter, razón por lo cual ya no necesitas reimprimir todo el contenido como lo hacias...
de esta manera.. seguro estoy.. que lograrás tu objetivo, espero que no me haya faltado alguna coma o algo.. pues lo escribi en el bloc de notas.. creo que no...
cabe destacar.. que no descarto.. que debido al listener del setinterval... aúnque el recurso esta en lo mínimo.. aún así.. es un recurso.. que se está gastando... las soluciones mas optimas y de grados avanzados.. se entrelazan hacia las apps intermediarias.. o hacer del servidor un "socket" con conexiones abiertas.. permantentes.. esto quiere decir.. que el cliente no envia datos.. hasta no haber una accion... pero si recibe cuando el srvr tiene un cambio en los datos... por lo demas... está solución es factible... para lo que requieres.. una de tantas.. tal vez.. no la mejor...
bueno.. espero que te ayude en algo..
Saludos y Éxito
edito: si me falto cerrar una cadena y tambien una coma :P