Olá pessoal, sou o dono do Tudoaki e confesso que faz tempo que não entro aqui no fórum do Imasters... Bom, desta vez pretendo fazer um sistema de chat para o site, para que os utilizadores possam trocar mensagens em tempo real com outros utilizadores online. Bom, no momento só tenho algumas anotações, idéias e dúvidas que gostaria de partilhar convosco.
Dúvidas:
- sobre o banco de dados... é obrigatório ter um? Por exemplo, eu poderia utilizar mysql, ou um documento de texto (.txt) e guardar lá as mensagens com fopen etc... mas não há como fazer o chat só utilizando sessões?
- sobre o funcionamento... bom, um sistema de chat seria algo do tipo, atualizações em tempo real das mensagens digitadas?, ou seja, tenho de utilizar por exemplo Ajax para atualizar a página de x em x milisegundos de modo a que se aproxime ao máximo de um sistema em tempo real? É assim que funciona por trás?
- bom, agora de uma maneira menos generalizada, ou seja, mais voltada ao meu caso mesmo... o que eu penso em fazer é algo do gênero, 2 utilizadores ao fazerem login no site, e verem o outro online, teria uma espécie de ícone na parte superior do site, que ao clicar abrirá uma janelinha de chat, que pode ser um div por exemplo... mas isso é mais pra frente, mais a parte gráfica.
Finzalizando...
o que eu preciso mesmo é esclarecer estas dúvidas sobre o funcionamento de um chat, porque como todo programador sabe, um bom projeto para ficar bem feito tem de haver um planeamento antes. Outra coisa... em relação aos meus conhecimentos, para que já fique claro o que eu sei e o que eu não sei... bom, sei trabalhar em javascript, php, mysql, css, html é claro, um pouco de ajax e tenho mais ou menos 5 anos de experiência em programação e construções de sites..
Bom, espero que vocês partilhem as vossas opiniões, idéias, críticas.. estarei a espera.
Página 1 de 1
Criação de um sistema de chat: planejamento, idéias...
#2
Postou 04 outubro 2009 - 12:04
Cara eu já não tenho muita experiência em sites, mais em sistemas, mais umas idéias para o seu chat é que inves do arquivo de texto seria bom guardar as conversas em um banco de dados, informação hoje em dia é tudo, se você não gravar pode ocorrer algo um dia no seu chat que você irá se arrepender de não ter tudo gravado, e também, na criação recomendo mais você com o uso da jquery, porque ela oferece MUITAS classes prontas que você iria demorar semanas para desenvolver com ajax, e a lógica é aquela básica, uma pagina para entrar com um apelido, cor de fonte um no máximo um m ou f para saberem se é homen ou mulher, ai quando loga você cria o sistema de conversasão, colocar uma segurança, diversas salas, limitar as salas por no máximo 30 usuários e tal, que nem há em alguns chats, mais acho bacana você começar com um chat simples e colocar no ar, se der certo, ai você cria um mais sofisticado com diversas salas, limitadas por gêneros e etc.
#3
Postou 04 outubro 2009 - 20:14
Primeiramente agradeço pela resposta João Vitor, você foi o primeiro. Desde ontem que esperava uma resposta, mas ninguém mostrou interesse no meu tópico. Como ninguém havia respondido comecei a desenvolver o sistema sozinho e ele já até funciona, faltando apenas alguns acabamentos...
Mas agora vamos lá ao que interessa...
Em relação a guardar num banco de dados... Bom, eu pensei nisso e cheguei à conclusão que não precisarei de um banco de dados mysql neste caso. Isso porque eu queria mesmo evitar o uso de um banco de dados mysql para não sobrecarregá-lo. Porque basta imaginar centenas de pessoas fazendo consultas ao mysql ao mesmo tempo... ainda mais com refresh de página com Ajax... Por isso, opitei por um documento de texto mesmo. Além disso eu não quero salvar as mensagens deste sistema de chat porque é algo simples, só para trocar umas idéias com outro usuário online mesmo. Não acho necessário salvar as conversas. Em relação à Jquery também não pretendo utilizar porque como eu disse, é um sisteminha simples. Já utilizei Jquery para outros sistemas mais complexos no site, mas para este não pretendo utilizar. Outra coisa importante é que não pretendo adicionar salas de chat no momento. Porque como eu disse, é um sistema para trocar mensagens com outro usuário apenas, pelo menos por enquanto... mais pra frente posso pensar se criar salas será uma boa ideia para o sistema... mas por agora não.
O sistema vai funcionar da seguinte maneira: cada usuário no meu site tem um perfil, tem também uma lista de usuários logados, sistema de correio eletronico, etc... ou seja, não vai ser difícil de localizar um usuário no site, para então iniciar uma conversa, então quando outro usuário quiser falar com tal pessoa online, ele clica num ícone qualquer e abre uma janelinha de chat no canto inferior direito para então trocarem mensagens em tempo real.
Veja como está ficando:

Bom, a principal parte eu já fiz, como podem ver na imagem acima.
Vou explicar como funciona. Quando o usuário faz login no site, tem lá um ícone chamado "Meu Chat", que ao clicar abre esta tal janelinha de chat, que neste momento é global, ou seja, é como se fosse uma única sala de chat, onde qualquer usuário que estiver logado na conta pode digitar algo nesta janelinha que todos verão as mensagens.
O sistema está constantemente fazendo refresh por trás com Ajax, para que quando algum usuário digitar uma nova mensagem, os outros usuários possam ver esta nova mensagem sem clicarem em nada, ou seja, sim é óbvio, isso é a base de um chat...
Mais coisas... como o sistema é restrito a membros registrados no site, automaticamente quando entram na janelinha de chat aparece o nome de usuário, que ao clicar vai direto para o perfil do mesmo...
Até aí tudo bem, mas o que eu pretendo fazer agora é um pouco diferente do que já fiz. Para cada usuário terá de haver uma janelinha de chat única, ou seja, cada usuário terá de ter a sua, para fazer com que as conversas sejam privadas entre os usuários. Neste caso, estou pensando em criar um documento de texto para cada usuário no site e então trabalhar com esta idéia... que como eu disse anteriomente, estou usando um documento de texto para guardar as conversas e não um banco de dados mysql... Será este caminho o mais correto? É que imaginem só se existirem milhares de usuários... e depois também estou pensando que em cada novo registro terei de criar um documento de texto para que este novo usuário tenha lá sua caixinha de chat reservada... Idéias?? Sugestões?? Críticas??
Qualquer idéia é bem vinda... Já publiquei uma imagem acima para terem uma idéia de como está ficando o sistema e para não pensarem que o projeto não vai pra frente.
Mas agora vamos lá ao que interessa...
Em relação a guardar num banco de dados... Bom, eu pensei nisso e cheguei à conclusão que não precisarei de um banco de dados mysql neste caso. Isso porque eu queria mesmo evitar o uso de um banco de dados mysql para não sobrecarregá-lo. Porque basta imaginar centenas de pessoas fazendo consultas ao mysql ao mesmo tempo... ainda mais com refresh de página com Ajax... Por isso, opitei por um documento de texto mesmo. Além disso eu não quero salvar as mensagens deste sistema de chat porque é algo simples, só para trocar umas idéias com outro usuário online mesmo. Não acho necessário salvar as conversas. Em relação à Jquery também não pretendo utilizar porque como eu disse, é um sisteminha simples. Já utilizei Jquery para outros sistemas mais complexos no site, mas para este não pretendo utilizar. Outra coisa importante é que não pretendo adicionar salas de chat no momento. Porque como eu disse, é um sistema para trocar mensagens com outro usuário apenas, pelo menos por enquanto... mais pra frente posso pensar se criar salas será uma boa ideia para o sistema... mas por agora não.
O sistema vai funcionar da seguinte maneira: cada usuário no meu site tem um perfil, tem também uma lista de usuários logados, sistema de correio eletronico, etc... ou seja, não vai ser difícil de localizar um usuário no site, para então iniciar uma conversa, então quando outro usuário quiser falar com tal pessoa online, ele clica num ícone qualquer e abre uma janelinha de chat no canto inferior direito para então trocarem mensagens em tempo real.
Veja como está ficando:

Bom, a principal parte eu já fiz, como podem ver na imagem acima.
Vou explicar como funciona. Quando o usuário faz login no site, tem lá um ícone chamado "Meu Chat", que ao clicar abre esta tal janelinha de chat, que neste momento é global, ou seja, é como se fosse uma única sala de chat, onde qualquer usuário que estiver logado na conta pode digitar algo nesta janelinha que todos verão as mensagens.
O sistema está constantemente fazendo refresh por trás com Ajax, para que quando algum usuário digitar uma nova mensagem, os outros usuários possam ver esta nova mensagem sem clicarem em nada, ou seja, sim é óbvio, isso é a base de um chat...
Mais coisas... como o sistema é restrito a membros registrados no site, automaticamente quando entram na janelinha de chat aparece o nome de usuário, que ao clicar vai direto para o perfil do mesmo...
Até aí tudo bem, mas o que eu pretendo fazer agora é um pouco diferente do que já fiz. Para cada usuário terá de haver uma janelinha de chat única, ou seja, cada usuário terá de ter a sua, para fazer com que as conversas sejam privadas entre os usuários. Neste caso, estou pensando em criar um documento de texto para cada usuário no site e então trabalhar com esta idéia... que como eu disse anteriomente, estou usando um documento de texto para guardar as conversas e não um banco de dados mysql... Será este caminho o mais correto? É que imaginem só se existirem milhares de usuários... e depois também estou pensando que em cada novo registro terei de criar um documento de texto para que este novo usuário tenha lá sua caixinha de chat reservada... Idéias?? Sugestões?? Críticas??
Qualquer idéia é bem vinda... Já publiquei uma imagem acima para terem uma idéia de como está ficando o sistema e para não pensarem que o projeto não vai pra frente.
#4
Postou 05 outubro 2009 - 02:24
Cara... mas se você não vai criar bando de dados, como você está carregando as atualizações do chat????
Porque tipo, se fosse feito com BD, eu faria assim:
Iria cadastrando cada mensagem...
no ajax, pra buscar novas mensagem e atualizar... eu mandava uma requisição do ajax com a ultima ID de mensagem q mostro... e verificaria se existe algo novo... se existir eu iria criar novos elementos no chat mostrando novas mensagens... ta complicado né??? deixa eu tentar mostrar na pratica:
Entendeu que ele não está dando um "refresh" no chat inteiro??? ele está apenas adicionando novas mensagens ao chat... esse código aí é o código que verificaria novas mensagens...
Se você ficar dando refresh no chat a cada 1 segundo... vai pesa mto no browser (lado cliente)...
Agora, de fazer com txt ou bd... eu preferiria fazer em BD cara, pq não??? BD é uma coisa pra ser usada... vai ficar td guardadinho la, redondinho... e um txt vai fica td espalhado lah nas pastas...
Com bd você vai poder criar os usuários lah.... e relacionar as mensagens com ele... sem precisar criar um arquivo soh pra ele... eh sho relacionar... tipo:
ID ------- MENSAGEM ------ USER_ID ------ DATA
1 -------- "Oi, td bem?" --- 432 ------------ 2009-10-05 02:23:18
2 -------- "Td, e você?" ------- 12 ------------- 2009-10-05 02:23:47
Entendeu?
Mas também, vai da sua lógica... não tem problema tbm em fazer txt... mas eu acho menos pratico...
Abraços,
Lucas Martins.
Porque tipo, se fosse feito com BD, eu faria assim:
Iria cadastrando cada mensagem...
no ajax, pra buscar novas mensagem e atualizar... eu mandava uma requisição do ajax com a ultima ID de mensagem q mostro... e verificaria se existe algo novo... se existir eu iria criar novos elementos no chat mostrando novas mensagens... ta complicado né??? deixa eu tentar mostrar na pratica:
<script>
var ultimoid = 0;
function getMessages()
{
new Ajax.Request( 'messages.php?id='+ultimoid, {
onSuccess: function( transport ) {
var messages = transport.responseXML.getElementsByTagName( 'message' );
for( var i = 0; i < messages.length; i++ )
{
var message = messages[i].firstChild.nodeValue;
var user = messages[i].getAttribute('user');
var id = parseInt( messages[i].getAttribute('id') );
if ( id > ultimoid )
{
var elTR = $('chat').insertRow( -1 );
var elTD1 = elTR.insertCell( -1 );
elTD1.appendChild( document.createTextNode( user ) );
var elTD2 = elTR.insertCell( -1 );
elTD2.appendChild( document.createTextNode( message ) );
ultimoid = id;
}
}
window.setTimeout( getMessages, 1000 );
}
} );
}
getMessages();
</script>
Entendeu que ele não está dando um "refresh" no chat inteiro??? ele está apenas adicionando novas mensagens ao chat... esse código aí é o código que verificaria novas mensagens...
Se você ficar dando refresh no chat a cada 1 segundo... vai pesa mto no browser (lado cliente)...
Agora, de fazer com txt ou bd... eu preferiria fazer em BD cara, pq não??? BD é uma coisa pra ser usada... vai ficar td guardadinho la, redondinho... e um txt vai fica td espalhado lah nas pastas...
Com bd você vai poder criar os usuários lah.... e relacionar as mensagens com ele... sem precisar criar um arquivo soh pra ele... eh sho relacionar... tipo:
ID ------- MENSAGEM ------ USER_ID ------ DATA
1 -------- "Oi, td bem?" --- 432 ------------ 2009-10-05 02:23:18
2 -------- "Td, e você?" ------- 12 ------------- 2009-10-05 02:23:47
Entendeu?
Mas também, vai da sua lógica... não tem problema tbm em fazer txt... mas eu acho menos pratico...
Abraços,
Lucas Martins.
#6
Postou 01 novembro 2009 - 12:41
Obrigado pela resposta Lucas Martins. Desculpa por não ter respondido antes... é que ultimamente não tive muito tempo para trabalhar no projeto devido a trabalhos da faculdade. Mas agora estou com um tempinho livre e vou voltar a trabalhar no projeto do chat. Vou estudar sua idéia e depois deixo aqui uma mensagem.
Página 1 de 1


Entrar
Cadastre-se
Ajuda

Quote

