Ao construir um site para comunicação online, há um problema que me dá dor de cabeça, que é sobre estatísticas em tempo real de usuários online. O cliente exige: contar o número atual de pessoas online, o número de visitantes, o número de membros. , e a lista de usuários online, incluindo visitantes, membros e membro gestor (se for visitante, o ID do visitante é gerado automaticamente, se for membro, o nome do membro é exibido). Por exigir performance em tempo real, primeiro vou passar a ideia de usar global.asa para resolver.
A chave do problema é como determinar se o usuário saiu e como executar um arquivo ou função quando o usuário sair.
Depois de discutir com alguns amigos na Internet, finalmente resolvi esse problema.
O princípio da solução é: escrever uma página universal A chamada página universal significa que cada página do aplicativo contém esta página, por exemplo: header.asp Nesta página, escreva um trecho de código usando XMLHTTP. código é Uma solicitação é enviada ao servidor a cada 10 segundos ou 20 segundos, com o objetivo de atualizar o tempo online do usuário atual e deletar usuários cujo tempo online ultrapassa um determinado tempo, para que os registros do usuário online no banco de dados mantenham um determinado tempo real natureza temporal.
O principal método de implementação é:
criar um novo banco de dados, os nomes dos campos são: id (caractere), nome (caractere), usuário (número) tt (data), admin (código de autoridade, 0-usuário normal, 1-administrador)
tabela nome:
cabeçalho online.asp ↓
============================================ === ================
<%
... ...
if session("s_in")<>1 e session("s_name")="" then 'If o usuário faz login uma vez em
rs.open "select * from online",conn,3,3
rs.addnew
rs("id")=sessão.sessionID
rs("nome")="Convidado" & session.sessionID
rs("user")=0 '0 significa que o usuário não está logado e é um visitante.
rs("tt")=agora
rs.atualização
rs.fechar
session("s_in")=1 'Definir se as informações do usuário foram armazenadas no banco de dados, indicando que ele está online
end if
if session("s_name")<>"" then 'Se o usuário efetuou login através da caixa de login
rs.open "select * from online where id='" & session.sessionID & "'",conn,3,3
rs("nome")=sessão("nome_s")
rs("admin")=session("s_admin") 'Atualiza o nome do usuário para o nome do membro
rs("user")=1 'Indica que o usuário efetuou login e é membro
rs("tt")=now 'Define a hora atual do sistema para a hora de login do usuário
rs.atualização
rs.fechar
fim se
... ...
%>
... ...
<head>
... ...
<linguagem script=javascript>
funçãoTeste()
{
var xmlhttp = novo ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false //Enviar solicitação de atualização para onceonline.asp);
xmlhttp.setRequestHeader("TIPO DE CONTEÚDO","aplicativo/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); //Envia uma solicitação de atualização a cada 10 segundos
</script>
... ...
</head>
... ...
============================= ============================
uma vezonline.asp
<%
rs.open "selecione tt online onde id='" & session.sessionID & "'",conn,3,3
rs("tt")=now() 'Atualiza o horário online do usuário online atual
rs.atualização
rs.close
rs.open "excluir online onde datediff('s',tt,now())>60",conn,3,1 'Excluir usuário de tempo limite
%>
=============================================== ==============
Desta forma, a natureza em tempo real da lista de usuários no banco de dados é basicamente garantida. O erro depende da diferença entre o tempo de atualização e o tempo de exclusão e o tempo. velocidade de processamento do servidor. Recomenda-se não atingir o tempo limite de exclusão. Se o intervalo de tempo entre os usuários for muito pequeno, pode causar erros entre os usuários online.
Esta solução foi depurada no WIN2000+SQL Server2000. Como esta solução tem requisitos de sistema relativamente grandes, espero que outros amigos encontrem soluções melhores e resolvam este problema juntos!
Minha caixa de correio: [email protected]
Meu nome é "Building Blocks", você está convidado a se tornar meu amigo!