chat escribiendo mensaje

Iniciado por kakashi20, 3 Abril 2014, 01:15 AM

0 Miembros y 1 Visitante están viendo este tema.

kakashi20

hola

quisiera saber como hacen en los chat cuando una persona esta escribiendo un mensaje y a la otra le aparece un mensaje "el usuario esta escribiendo...".

alguna idea ?

gracias..

engel lex

jscript

algo como
Código (javascript) [Seleccionar]
if(getElementById("cuadro_chat").value!=""){
   enviar_al_servidor_que_el_usuario_esta_escribiendo()
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

kakashi20

Como haría para mandar esas variables al servidor y que las viera el otro usuario en tiempo real ?

engel lex

hay un par de métodos, pero la más común seria un httpRequest, mejor conocido por ajax, es una comunicación espontanea (asincronica) con el servidor, donde en lugar de que todo el navegador cargue una pagina, un jscript llama a una pagina del servidor para mandar o recibir contenido (como funciona el chat en si mismo), allí en lugar de pasarle el texto del chat, solo le envía un comando de que se está escribiendo, el servidor lo procesa y lo pasa al otro usuario
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

kakashi20

Al decir que se manda al servidor la única forma que se me ocurre es que se modifique vía ajax un estado en la bd y el otro usuario tenga un script con setInterval() y este verifiqué el estado en la bd y dependiendo de este se coloque que el otro usuario está es escribiendo o no....

Sí uso está forma, al usar el setInterval() en tiempos muy bajos., cada llamado a la bd, digamos cada 5 segundos, tumbaría la conexión de sitio web.

Esta es la forma o habría alguna otra forma ?

Gracias

engel lex

no, con 1 llamada cada 5 segundos por protocolo http puedes tener un ping de 90ms y la petición tardaría 10ms tendrías que 10 usuarios pueden entrar en el lapso de 1 segundo sin solaparse, 50.000 usuarios harían mantendrían 1.000 peticiones simultaneas abiertas...  eso pesimistamente... creo que es un numero fácilmente manejable (tomando en cuenta que si tienes más de 50mil usuarios activos simultáneos, no vas a ser tan avaro como para pagar 1 solo server)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

kakashi20

Ya había probado el setInterval haciendo una llamada cada 10 segundos para sacar una info de la bd pero llegaba un momento que me tumbaba la conexión ya que hacia una conexión cada 10 segundos a la bd.

Ahora, la conexión que tu medices es a la bd o simplemente usando las variables de sesión y haciendo un setInterval preguntando sí esas variables contienen algo ?

No se, no se me ocurre otra cosa.

Gracias

EFEX

La otra es utilizando websockets.
GITHUB 

engel lex

el websocket nunca me pareció buena idea para eso, ya que 50.000 usuarios, si serían 50.000 conexioes abiertas simultaneas ocupado espacio en ram y siendo registradas por procesador
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.