Jump to content
triplexim32

duvida sobre chating

Recommended Posts

triplexim32

Um chat que seja feito em ajax necessita obrigatoriamente de fazer pedidos de X em X segundos ao servidor a verificar se existe la mais alguma coisa?

Não é possível fazer com que o cliente nunca verifique se já la existe alguma coisa na sala de chat, mas sim que quando alguem escreve algo cada cliente é notificado disso?


<

Share this post


Link to post
Share on other sites
triplexim32

O que pretendes não é possível fazer em ajax mas existem técnicas que simulam o que pretendes.

Podes ler mais sobre isso em: http://en.wikipedia.org/wiki/Comet_(programming)

Basicamente é um while(true) com um flush() certo?

Mas isso da cabo do servidor em 3 tempos! prefiro fazer pesquisas de x em x segundos do que ter um while (true) numa pagina oO


<

Share this post


Link to post
Share on other sites
useware

Não conheço a implementação concreta dessas técnicas mas pelo que percebo a ideia é a seguinte:

Mandas um pedido ao servidor e dás-lhe a instrução para executar um callback quando receber a resposta. Esse pedido fica sempre activo (a ligação ao servidor permanece aberta) até o servidor mandar uma resposta. Quando receber a resposta o callback faz o que tem a fazer e envia um novo pedido ao servidor.

É um ciclo mas não é um while(true). Para exemplificar se durante 1 minuto o servidor não tiver nenhuma resposta para entregar só é feita 1 ligação ao servidor nesse espaço de tempo, se pesquisares de x em x segundos fazes várias ligações num minuto.

Share this post


Link to post
Share on other sites
triplexim32

Não conheço a implementação concreta dessas técnicas mas pelo que percebo a ideia é a seguinte:

Mandas um pedido ao servidor e dás-lhe a instrução para executar um callback quando receber a resposta. Esse pedido fica sempre activo (a ligação ao servidor permanece aberta) até o servidor mandar uma resposta. Quando receber a resposta o callback faz o que tem a fazer e envia um novo pedido ao servidor.

É um ciclo mas não é um while(true). Para exemplificar se durante 1 minuto o servidor não tiver nenhuma resposta para entregar só é feita 1 ligação ao servidor nesse espaço de tempo, se pesquisares de x em x segundos fazes várias ligações num minuto.

Saquei este com ajax

http://www.zeitoun.net/articles/comet_and_php/start

Tem a base para começar o trabalho.

Entretanto abri umas 300 tabs com o mesmo e enviei mensagens o servidor respondeu bem, deixei as tabs abertas a espera de respostas e fui navegar numa pagina pesada do servidor, nao obtive qualquer lentidão, só mesmo no Firefox, mas como no IE continuou rápido é sinal que ta a funcionar bem.

Tens algum exemplo que possa ser mais util que este?

Obrigado desde já a ambos


<

Share this post


Link to post
Share on other sites
triplexim32

Como já disse só tenho umas ideias sobre a teoria, mas na página da wikipédia acho que diz que o chat do gmail é feito com essa técnica por isso tem de trabalhar bem em qualquer browser incluindo o firefox.

já estive a analisar e basicamente o que acontece é:

Em vez de ser o ajax a fazer pedidos de X em X segundos é o PHP que analisa de X em X segundos se existe alguma coisa nova e so quando tiver uma resposta é q a devolve para traz, quando isto acontece o ajax volta a refazer o pedido.

Ou seja o ajax fica a espera da resposta do PHP ate q este devolva alguma coisa, até la o php fica a martelar codigo infinitamente ate encontrar alguma coisa.

Poupa-se apenas nos pedidos HTTP, o resto mantêm-se


<

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.