Recentemente, PHPChina lançou um tópico especial sobre tecnologia de sala de chat PHP. Estou trabalhando neste projeto recentemente, então gostaria de expressar minha opinião pessoal aqui.
Principais funções da sala de chat:
1. Cadastre-se, faça login, saia, modifique informações.
2. O usuário solicita a criação de uma sala de chat e personaliza os atributos da sala de chat.
3. Exiba o nome, a descrição, o moderador, os anúncios e os anúncios da sala de bate-papo.
4. Exiba a lista de usuários online em tempo real e você poderá visualizar as informações do usuário online (apelido, e-mail, IP, horário online, etc.).
5. Publique conteúdo de bate-papo, atributos de fonte, ações, expressões e frases comuns.
6. Permite invisibilidade, bate-papo privado, rolagem, bloqueio de usuário, limpeza de tela, seleção de cena de bate-papo, música de fundo e personalização do método de envio.
7. Os administradores têm o direito de gerenciar membros (expulsá-los, proibi-los de falar e transferir direitos de gerenciamento).
Coisas a serem observadas:
1. É proibido o uso de estrutura de frames (iframe não traz nenhum benefício a não ser reduzir sua carga de trabalho)
2. O código front-end e o código de fundo são completamente separados, os dados são transmitidos apenas através do canal ajax e apenas os dados necessários devem ser transmitidos. (Exibir dados em primeiro plano e processar dados em segundo plano)
3. É proibido atualizar toda a página causada pelo programa, e apenas atualizar o conteúdo que precisa ser alterado (é proibido usar cabeçalho e meta para atualizar a página).
4. Ao enviar conteúdo de bate-papo, você não pode buscar cegamente a velocidade da experiência do usuário e ignorar a ordem real de envio do registro de bate-papo. (Ou seja, os registros de chat enviados devem ser reorganizados na ordem real no servidor e depois transmitidos ao cliente, pois muitas pessoas podem enviar informações ao mesmo tempo)
Tecnologias utilizadas:
1. A ponte entre o front e o backend-AJAX. Você pode escolher jquery, XAJAX. Prefiro o jquery, que é rápido, simples e durável, possui muitos plug-ins e é atualizado rapidamente.
2. A forma do suporte de dados-XML. Na verdade, os dados gerais da sala de chat não são muito complicados e o json é suficiente.
3. Camada de abstração de banco de dados-ADODB. É mais rápido usar o DOP. Já estou acostumado a usar ADODB.
4. O meio de armazenamento de dados subjacente - MySQL. Não há dúvida sobre isso.
5. Meio de armazenamento intermediário de dados - memcache. Armazene dados de leitura e gravação em alta velocidade na memória compartilhada do memcache para reduzir a carga no banco de dados.
6. Se você deseja implementar vídeo e voz, você precisa do suporte do servidor FMS (flash media server), e o cliente precisa instalar o flash player. E envolve interação de dados entre html, javascript, flash e background. Não há muita informação sobre isso.
Estas são as principais tecnologias No desenvolvimento de aplicações reais, ainda existem muitos problemas detalhados que precisam ser resolvidos.
Por exemplo: Como lidar com atualizações de listas online?
Existem duas maneiras:
1. Atualize toda a lista (havendo atualizações ou não).
2. Adicione novos membros online, exclua membros offline e altere membros cujas informações foram alteradas.
Obviamente a segunda opção é a melhor opção.
Como lidar com problemas de simultaneidade XmlHttpRequest?
JavaScript é de thread único. Se houver dois objetos XmlHttpRequest ao mesmo tempo, podem ocorrer problemas facilmente, o que exige que controlemos a geração e o final do XmlHttpRequest.
Na sala de chat, os dados que precisamos atualizar incluem principalmente: lista online (incluindo atualizações de informações dos membros), registros de chat, atributos da sala de chat, etc. A frequência dessas atualizações é inconsistente (se os tempos forem consistentes, você só precisa criar um XmlHttpRequest para lidar com isso). O histórico de bate-papo leva menos tempo para ser atualizado e as listas online podem demorar um pouco mais para serem atualizadas. Sem usar uma estrutura, se você criar objetos XmlHttpRequest separadamente, é provável que ocorram problemas de simultaneidade. Isso requer a criação de uma função de controle de tempo e processo.
setInterval('process_control()',3000) //Chamado uma vez a cada três segundos
A função process_control implementa o agendamento de tarefas, como executar tarefas em um determinado intervalo e executar a próxima tarefa somente após a conclusão da tarefa.