Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilker

Script de Chat para estudos

Recommended Posts

bom, divulguei recentemente no PHP Brasil meu script de chat em versao imcompleta, o chat n foi testado para ter estabilidade (pode ser q tenha, e pode ser que nao), enfim, o chat no momento nao foi feito para ser usado (eu pelo menos nao recomendo), mas o chat tem uns recursos legais, e eu enviei o chat com o intuito de estudarem o codigo.

 

ele tem MTO Ajax, bastante Javascript mesmo, e eh bom pra estudar, vai o link pra ele no PHP Brasil:

 

http://www.phpbrasil.com/scripts/script.php/id/1926

 

link para ver o chat em funcionamento:

 

http://www.faculdadeguararapes.edu.br/site...oal/Wilker/wwc/

 

vo posta aki os recursos do chat:

 

recursos da versao 2.0-:

 

1 - possibilidade de entrada em multiplas salas simultaneamente

2 - conversas privadas em abas separadas

3 - som ao receber mensagens pessoais (apenas em IE)

4 - layout melhorado

5 - registro de nick

6 - mais comandos uteis (digita /h para ver a lista de comandos)

7 - emoticons

8 - troca de cor para suas mensagens

9 - smarty nick write (pra digitar o nick dos outros, você apenas digite uma ou mais letras iniciais, e depois va apertando a tecla TAB ateh ser escrito o nick desejado, esse recurso eh similar aos de sala de mIRC)

 

esses recusos descritos ja foram implementados nessa versao do script, agora vai a lista de recursos que talvez eu chegue a fazer:

 

1 - administradores de chat, podendo banir e mudar permissao de outros usuarios

2 - criacao de salas por parte de usuarios

3 - filtro de palavras complexo

4 - limite de usuarios por sala

5 - limite de usuarios no chat inteiro

6 - sistemas de seguranca para impedir entrada automatica

7 - sistema que suporte extensoes para o chat

8 - ignorar usuarios

 

 

quem tiver duvidas sobre o codigo, ou como certos recursos foram implementados, postem aki q eu vo tenta tirar suas duvidas ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom poderia dizer pq não recomenda usar? fiquei surpreso ao entrar no site com a velocidade em que as mensagens digitadas são postadas, na verdade achei super rapido leve e muito bom, esta de parabens mesmo...a maioria dos chats pezam com varios usuarios dentro com esse script podera acontecer o mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu n recomendo seu uso pq ele n foi testado da forma q deveria ser, e tb nao foi finalizado, ainda faltam mtas coisas a serem implementadas, inclusive o painel de administracao do chat (q tb nao foi implementado), eu liberei o codigo incompleto, pq no momento eu n tenho planos pra terminar ele, mas ele pode ser util pra quem quer estudar um codigo de chat. ele pode ser usado em sites, mas como eu disse, eu apenas nao recomendoqto a pesar com mtos usuarios, eu acho q isso depende mto do servidor, esse meu chat n apresentou um consumo mto alto de banda nao, tendo um servidor com bom processamento e ram, da pra segura uma quantidade boa de usuarios sem ficar lagado

Compartilhar este post


Link para o post
Compartilhar em outros sites

vo da uma pequena aula de "velocidade aparente" em chats, vo explica pq você achou o meu tao rapidoprimeiro eu gostaria de explicar o funcionando dos chats comuns que voce ve na neta parte basica eh simples, no servidor existe uma tabela, que guarda as mensagens enviadas, essas mensagens normalmente tem marcadas em si um timestamp de enviotabela do dbusuario | mensagem | timestamp+ - assimbom, agora imagine seu browser fazendo varias requisicoes ao servidor, para verificar as mensagens que devem ser carregadas, ele faz isso regularmente em um tempo pre-definido (esse tempo deve ser bem ajustado, pois qto menor o intervalo, mais rapido as mensagens irao aparecer, mas isso gera um maior custo de banda e processamento no servidor, isso deve ser medido para ter um bom resultado em velocidade/desempenho)entao, qdo você envia uma mensagem, ela é cadastrada nessa tabela, e qdo houver o proximo ciclo de load das mensagens, sua mensagem vai ser vista, e exibida na tela, o tempo entre seu envio e o proximo ciclo de leitura é oque gera o atraso para a mensagem aparecer na sua telano meu chat o sistema eh parecido, mas com uma diferenca, o script que faz o ciclo de leitura de mensagens no servidor, no meu chat ele simplesmente ignora as mensagens que forem enviadas por voce mesmo, isso é, ele nao carrega as mensagens que o proprio usuario enviou, no lugar disso, ao você enviar a mensagem, ele automaticamente joga ela na tela, antes mesmo dela ser realmente enviada ao servidor, com isso voce tem um imagem do chat ser mto mais rapido, mas na verdade, a mensagem aparece na sua tela antes mesmo de chegar no servidor.esse mesmo esquema é usado em programas de Instant Messenger (como MSN ou ICQ), e do mesmo jeito que ocorre nos IM, se houver algum problema de conexao entre o browser e o servidor, e a mensagem nao puder ser enviada, vai aparecer akela mensagem na tela do usuario:A seguinte mensagem nao pode ser enviada:cacncacscascacomo o usuario final nao tecnico nao precisa saber desses detalhes, para ele, o chat apresenta uma velocidade mto superior, e ao mesmo tempo gera uma melhor experiencia do usuario com o seu programa----------------------------------------------------------------------------esse texto acima foi uma das dicas de chat q eu posso dar pra vcs, futuramente nesse topico eu estarei escrevendo outras tecnicas para desenvolvimento de chats ;)c houver alguma tecnica em expecifico que alguem queira saber, me pergunta, c eu souber eu posto ela aki com o maior prazer ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

que bela aula, muito bom mesmo, na verdade é uma pena que não posso terminar o script pois eu adorariar ter um chat no meu site, visto que tenho um servidor de jogos com mais de 3mil contas ativas mensalmente e media de 80 jogadores online um chat seria de grande utilizade visto que se pode fazer muitos negiocios atraz de um chat para ser usado no jogo ^^torço para que um dia termine esse char e libere novas versões para serem usadas em sites, pois tenho certeza de que muitos vão usar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mano não to conseguindo fazer o download do codigo fonte... acho que deletaram do lugar onde estava..Por favor se poder disponibilizar agradeço...Parabens T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

to vendo aki que o phpbrasil ta fora do ar...infelizmente to sem o arquivo do codigo aki, mas o phpbrasil deve voltar ao ar logo

Compartilhar este post


Link para o post
Compartilhar em outros sites

dicas sobre desenvolvimento de chat

 

estrutura de usuarios

 

bom, agora eu vo explica como funciona a parte de usuarios.

 

para ter uma lista de usuarios, logicamente você tem que ter algum lugar para salvar isso, no meu caso eu uso apenas uma tabela, que serve pra usuarios, sua estrutura basica fica assim:

 

nick | sala | timestamp

 

ok, lembre-se que nao podem haver dois nicks iguais na tabela, pois isso geraria uma confusao total, entao na hora do login voce deve verificar se alguem ja esta usando aquele nick, para impedir a duplicidade.

 

no campo sala, voce pode usar o nome da sala, ou, para ter um melhor controle, use o ID da sala. Em timestamp fica gravado o "timer" do usuario, esse timer deve ser atualizado cada vez que houver uma requisicao desse usuario ao servidor, esse timestamp serve pra controlar o timeout. voce deve manter uma verificacao constante sobre esse timer, por exemplo, c o usuario tem uma requisicao que atualiza esse timer a cada 2 segundos, entao voce pode simplesmente remover todos os usuarios que estiverem com o time atrasado mais de 30 segundos, c o kra n se atualizo em 30 segundos, ou a rede dele caiu e ele nao esta mais conectado a internet ou ele saiu do chat de forma incorreta (e o chat nao removeu seu registro da sala), isso é oque chamam de pingtimeout

 

bom, agora ja temos a nocao da tabela e sua estrutura, agora vamos saber como verificar entrada e saida de usuarios.

 

quando alguem entrar na sala, de cara voce deve verificar todos os usuarios que estao nessa sala, nessa 1 requisicao, gere um array para gravar essa lista, e grave esse array numa secao.

 

do mesmo jeito que existe o ciclo para pegar mensagens (como eu disse anteriormente), tambem existe um ciclo para verificar os usuarios (se voce quizer, os 2 ciclos podem ocorrer na mesma requisicao), nesse ciclo, voce tem gravado no array a lista de usuarios anteriormente gravada, depois disso voce deve gerar outro array, com a lista dos usuarios atuais, depois que voce tiver esses 2 arrays (lista anterior, lista atual) voce deve compara-las para saber quem entrou e quem saiu do chat, essa comparacao eh facil de fazer, voce so precisa verificar a diferenca entra os arrays:

 

$usuarios_que_entraram = array_diff($listaAtual, $listaAnterior);$usuarios_que_sairam = array_diff($listaAnterior, $listaAtual);
ou seja, os usuarios que entraram sao aqueles estao na lista nova, mas nao estao na lista velha, e os que sairam sao os que estao na lista velha, mas nao estao na lista nova

 

apos feita a comparacao, atualiza a sessao que grava a listagem, com a lista + nova, para que o processo possa ter um ciclo correto

 

espero ter esclarecido algumas duvidas sobre controle de usuarios em chat.

 

qualquer outra duvida, eh so postar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, sinceramente muito bom o chat... praticamente um mIRC. O cabrero é entender certinho o funcionamento porque é muuuuito grande. Eu tava precisando fazer algo do tipo MSN ou seja, igual ao sistema de chat privado que você usou ali. Pode me dar uma ajuda de como funciona isso? Por exemplo como eu sei que o cara tem uma mensagem que é só pra mim? Na hora que ele executa aquela função getMessage faz essa verificação e daí abre a nova aba?Outra coisa que não entendi é o funcionamento daquele negócio de abas, você cria aquilo com o script que existe no chatPanel.js né?Se puder me dar uma ajuda pra criar esse "MSN" eu agradeço, nem que seja só dando umas dicas de quais arquivos eu precisaria dar uma olhada "profunda" :)Ah, onde ficam gravadas as mensagens das salas? Ou só são gravado as mensagens privadas?Valeu!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

na tabela onde ficam as mensagens no banco de dados existe um campo que indica para quem a mensagem foi, é assim que se sabe quem deve recebe-la, eu usei uma nomenclatura pra diferenciar mensagens de usuarios de mensagens para salas (n lembro exatamente, mas acho q foi U para usuarios e R para salas, exemplo: mandando mensagens para o usuario wilker, ai fica na tabela assim: U:Wilker) a parte de abas esta toda em javascript, mas esta em mais de um arquivo e realmente eh um pouco complicada :Ppara saber se a mensagem é nova, eu uso um sistema de time, cada mensagem tem seu timestamp marcado na hora que é enviada, e cada usuário tem marcado (em SESSION) o time da ultima mensagem que foi lida, assim eu mando pegar do banco de dados apenas as mensagens com time maior do q oque esta marcado para akele usuario, e apos pegar as mensagens o time do usuario eh atualizado para o maior time das mensagens que ele pegou, assim o usuario só pega as mensagens que ainda nao foram lidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tô de cara com os negócios aqui hehehe, criação de objetos em Javascript... nunca cheguei a fazer isso, muito massa :)Ei, tem um negócio aqui assim no chatPanel.js:$('conversaLocation').appendChild(this.panel);O que significa " $('conversaLocation') " ? Pelo que eu entendi seria um getElementById("conversaLocation") porque existe no layout essa div. Mas o $ tem alguma coisa a ver com PHP? é que eu queria fazer pra outra linguagem :) Se trocar tudo por getElementById daria certo? Isso é uma hipotese, nem sei se é isso mesmo hehe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a funcao $() foi uma funcao criada por mim, ela realmente eh apenas um atalho para document.getElementById()

 

definicao:

 

function $(obj) {  return document.getElementById(obj);}

n lembro c eu usei essa definicao simples, ou se usei a do prototype, a do prototype eh + sofisticada, e verifica se foi passado uma string, um objeto, ou varios, c passar varios ela retorna um array com os elementos

 

definicao do prototype:

 

function $() {	var elements = new Array();		for (var i = 0; i < arguments.length; i++) {		var element = arguments[i];		if (typeof element == 'string')			element = document.getElementById(element);				if (arguments.length == 1) 			return element;				elements.push(element);	}		return elements;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wilker -> tá de parabens filhote... tu é o kra do js e misturando isso com php só tem que sair coisa boa mesmo.. gostei do seu chat.. muito bom...o link para teste ai está com problema... então eu disponibilisei ele aqui nesse link

 

http://ajax.baratoweb.com.br/wwc/

 

Quem quiser testaré só acessar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualquer coisa vou deixar disponibilizado emmeu servidor.. ai qualquer coisa que você queria colocar online que tenha assunto do ajax.. pode usar esse link ai.. que criei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O muito top esse seu chat.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ei, o Ajax que você usa faz requisição de modo diferente né?Ajax.open('pagina.html', {callback: cb, error: error, post: 'get=self', args: t});Pelo que eu entendo nisso ele abre a página que no primeiro parâmetro e o resultado vai ser passado pra função callback (cb) só que ela tem 2 parâmetros no caso, como ele vai saber quais são os respectivos parâmetros?Porque eu fiz um teste com uma página html normal com um texto só... daí ele devolve certinho o texto de lá pra um alert, mas o ajax.status fica 0 por isso ele não executa direito...Edit:Aff... acabei de mudar e descobri que o Ajax não muda o status pra 200 quando ele tá "lendo" uma página html, acho que é porque ele não tem que esperar o servidor interpretar o código... dai com página HTML puro o status fica sempre 0 em vez de 200... Isso foi oq eu entendi. Alguém já se deparou com essa situação pra ter uma idéia certa do que acontece?Valeu! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite galera!...

 

Wilker... cara, muito bom seu chat.

Parabéns mesmo!... um dos melhores que já acessei.

 

Porém, gostaria de implementar um pequeno detalhezinho a mais em minha cópia, postada em meu web-site:

 

Gostaria que na lista de canais, tivesse o nome do canal com o número de usuário online no momento.

 

Será que alguém poderia me ajudar nisso??

 

[]'s

 

 

 

vlw moçada... http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.