Ir para conteúdo

POWERED BY:

Arquivado

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

Micilini Roll

Sistema de Chat em Tempo Real

Recommended Posts

Olá pessoal seguinte estou querendo desenvolver um sistema de chat aonde possibilite:

 

  • Conversa somente entre 2 individuos
  • Possibilidade de enviar mensagens
  • Possibilidade de Receber mensagens
  • Possibilidade de visualizar o tempo em que o remetente leu a mensagem enviada

 

E somente isso, desconsidere a possibilidade de visualizar usuarios online entre outras coisas... Entao vamos lá a primeira coisa é definir como sera modelado o banco de dados, neste caso, eu pensei da seguinte forma:

 

Banco de dados para usuarios

 

Neste banco de dados conterá os seguintes campos:

 

 

id - int /11 / auto incremento/ chave primaria

nome - varchar / 255

Login - varchar / 255

Senha - varchar / 255

 

Banco de dados para mensagens

 

 

 

id - int /11 / auto incremento/ chave primaria

id_usuario_enviado - int / 11

id_usuario_recebidor - int / 11

mensagem - longtext / 0

data - varchar / 255

 

 

Bem vamos pular o sistema de login e senha e irmos direto ao assunto, bem no caso o chat funcionará da seguinte forma:

 

  • O usuario A digita uma mensagem para o usuario B
  • Na tela do usuario B (E o A tambem) existe um comando jquery na qual chama a todo momento (a cada 2s) uma classe PHP
  • Esta classe PHP pega o id do usuario logado e pesquisa nas mensagens se existe este id, ou no id_usuario_enviado ou no id_usuario_recebidor, e ele organiza isso pelo campo data!
  • Em seguida a classe PHP retorna estas mensagens e o jquery junto ao css faz o trabalho para colocar no chat

 

Bem é assim que eu imagino que funcione, me sinto meio inseguro na hora de colocar este chat pra frente, pois acredito que ele esta facil de mais, e consequentemente nao me pareçe a melhor forma de se fazer isso, alem de nao saber como este projeto irá se comportar com mais de 300 mil mensagens e esse numero so aumenta a cada segundo.

 

Por isso estou aqui e pedindo ajuda de voces para encontrarmos a melhor forma de se fazer isso, todas as opniões sao aceitas.

 

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai minha dica

 

Use Long Polling e conexão persistente

 

E entenda sobre os campos do mysql

 

TINYTEXT | 255 (2 8 -1) bytes
TEXTO | 65.535 (2 16 -1) bytes = 64 KB
MEDIUMTEXT | 16.777.215 (2 24 -1) bytes = 16 MB
LONGTEXT | 4294967295 (2 32 -1) bytes = 4 GB

 

 

Sendo assim não há necessidade de

mensagem - longtext / 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desenvolvi um também.

 

Também achei que estava muito "fácil", no final meu chat funcionava porém no meu console tinham centenas de requisições que no servidor ficava lento.

 

Parei com o projeto, depois pretendo continua-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi pessoal ja ouvi falar destes plugins que voces me recomendaram, mas recentemente descobri um site chamado codecanyon, na qual podemos comprar alguns projetos prontos e integrar a nossos websites, dando uma leva passada no site a procura de um script de chat, este do link abaixo me chamou muita atenção:

 

Impact Plus - Facebook Style Chat

 

Pelo o que eu pude perceber, ele pareçe bem profissional (Tanto nas fotos, tanto no demo testado), ele tem exatamente o que eu queria e mais um pouco, eu poderia ate tentar reproduzir um igual e me aventurar sozinho, mas acredito que pegando esse codigo vai economizar tempo, e fazendo com que eu somente gaste meu tempo em analisar e aprender como funciona este codigo.

 

Atraves dos testes que fiz pude perceber que:

 

  • Reconheçe usuarios online, e demora 3 segundos a mais que o chat do facebook para voce receber a notificação de um usuario entrou
  • Existe a capacidade de reconheçer quando o usuario esta digitando uma mensagem [user is typing] (Pelo que eu testei esta funcionalidade é meio que instavel, tem vezes que apareçe e outras nao)
  • Capacidade de enviar fotos, emoticons, textos e arquivos
  • Funções para bloquear usuario, entre outros, criação de grupos
  • Quando voce envia uma mensagem ao usuario automaticamente a caixa de chat é aberta na janela do outro usuario
  • Quando fecha o navegador o usuario continua online ¬¬

 

(So em pensar em tentar reproduzir este codigo na marra ja me dá dores de cabeça rs)

 

Bem pareçe ser um bom codigo, caso eu vá pega-lo vou dar uma passadinha por aqui e colocarei algumas dicas abraços :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte pessoal, como prometido caso eu comprasse o codigo fonte do chat, eu voltaria aqui neste topico e colocaria algumas dicas de como ele é feito (Base de dados, arquivos php, arquivos js) Entre outros.

 

Ja tenho o codigo fonte funcionando perfeitamente em um dos meus servidores de teste, deixo abaixo o link com voces:

 

Chat de Testes

 

Tudo neste codigo ainda é muito novo, vou postando aqui inicialmente como foi feita a base de dados do codigo, como esta a estrutura de cada tabela, Caso alguem queria saber algo a mais existente naquele chat postar aqui.

 

Abraços

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal sou eu de novo, voltei com algumas noticias no mínimo interessantes sobre o banco de dados deste projeto de chat, bem no total foram criados 7 banco de dados automáticos pelo sistema, neste caso so vou mostrar um deles, pois este é mais relevante ao assunto na qual discutimos neste típico bem vamos lá:

 

Tabela Messages

Esta tabela armazena as mensagens trocadas sejam por 2 usuarios (chat simples) ate mesmo em grupo, ela possue os seguintes campos:.

ID -> Possivelmente armazena os ids dessa conversa

UserId -> Armazena o id do usuario que enviou esta mensagem

TargetId -> Armazena o id do usuario que irá receber a mensagem

GroupId -> Armazena o id caso for um grupo de usuarios

RelationId -> Armazena uma especie de números com letras embaralhados (Eles mudam a cada mensagem enviada), nao sei exatamente pra que ele serve

Message -> Mensagem que foi enviada

Sent_Date -> Data que foi enviada a mensagem

Sent_From -> mesma logica do campo UserId

Sent_To -> mesma logica do campo TargetId

Is_Ready -> armazena numeros de 0 a 1, concerteza pelo nome, capta se a mensagem foi lida ou não

Is_Opened -> Armazena numeros de 0 a 1, concerteza pelo nome, veririca se a mensagem foi aberta ou nao , na aba de chat, estilo facebook

Read_Date -> Armazena a data e hora que foi lida a mensagem

Read_datetime -> apresenta a data hora e segundas na qual a mensagem foi lida

Read_Timestamp -> mesma logica do campo acima

Has_Attachment -> armazena numeros de 0 a 1, possivelmente veririca se tem arquivos enviados

is_noticed -> Acredito que o nome deste campo ja diz tudo, mas ainda tenho minhas incertezas

Notice_Section -> seção do notice ou algo do tipo, ainda prevalece as incertezas

Datatieme -> mais um campo que armazena data e hora

TimeStamp -> mesma logica do campo acima

Source_Code -> Sempre armazena valores como ‘chat'

Source_name -> Sempre armazena valores como os de cima, sendo que a primeira letra é sempre maiúscula como ‘Chat’.

eu não esperava que os valores armazenadas nesta tabela se comportam de forma diferente, ou seja, eles sao armazenados duas vezes, sendo que alguns campos mudam, observe:

Captura_de_Tela_2014_06_21_s_17_14_35.pn

Podemos observar que os únicos campos que sofreram a troca nestas mensagens duplicadas foram os campos de UserID e TargetID​, infelizmente ainda não cheguei a olhar por completo o funcionamento deste chat, so dei uma breve olhada no banco de dados, mas acredito que quem tem uma experiência ou conhecimento na linguagem PHP ja deve imaginar como funciona este chat.

 

Tudo bem que ate eu mesmo acho que existam melhores maneiras de se organizar um chat com as mesmas funcionalidades do facebook, mas no momento este chat foi o mais completo que achei, e dando uma breve analise na estrutura do banco de dados, a pessoa que fez este chat pareçe ser um bom profissional :)

 

Topico Resolvido

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.