Carregando ...
Desculpe, ocorreu um erro ao carregar o conteúdo.

27007Re: [php-pt] Exclusão de "fantasmas" de Chat

Expandir mensagens
  • Eduardo Scoz
    2 de jul de 2001
    Exibir fonte
    • 0 Anexo
      também estou fazendo um sistema de chat em PHP.

      Estou utilizando sockets para conexao entre o usuário e o servidor.. Deste
      modo, quando o usuário fechar o browser, a conexao vai cair automaticamente,
      e vai eliminar o usuário do chat dois minutos deposi ( tempo que o servidor
      leva para identificar uma desconexão por queda ).


      estou utilizando mysql para manter a lista de usuarios.. é bem mais simples
      que txt.


      ................................................................
      Eduardo Scoz
      Centro de Processamento de Dados
      Fundacentro Santa Catarina
      http://www.fundacentro.sc.gov.br


      ----- Original Message -----
      From: "Fabio Zimmermann" <fabio.p.z@...>
      To: "PHP para iniciantes" <php-pt@yahoogroups.com>
      Sent: Monday, July 02, 2001 1:48 PM
      Subject: [php-pt] Exclusão de "fantasmas" de Chat


      >
      > Olá a todos.
      >
      > Seguinte: implementei um chat em PHP baseado em arquivos, que armazenam
      tanto
      > as mensagens enviadas qto os usuários presentes na sala no momento. Para
      > eliminar automaticamente usuários "fantasmas" - aqueles que param de usar
      o
      > chat mas não clicam em "sair" - implementei a seguinte função abaixo:
      >
      >
      > function exclui_usuarios_offline($curso, $arquivo_usuarios, $tempo_maximo)
      {
      > $tstamp_atual = time();
      > $lista_usuarios = file($arquivo_usuarios);
      >
      > $arq = fopen($arquivo_usuarios, "w");
      > foreach($lista_usuarios as $um_usuario) {
      > list($datah, $um_us_login, $um_us_ip, $um_us_datah_ult_acao) =
      > explode(TAG_U, $um_usuario);
      > // timestamp de $um_us_datah_ult_acao
      > list($data, $horario) = explode(" ", $um_us_datah_ult_acao);
      > list($ano, $mes, $dia) = explode("-", $data);
      > list($horas, $minutos, $segundos) = explode(":", $horario);
      > $tstamp_usuario = mktime ($horas, $minutos, $segundos, $mes, $dia,
      $ano);
      >
      > if($tstamp_atual - $tstamp_usuario > $tempo_maximo) // O RETIRA
      > insere_mensagem_arquivo("$um_us_login sai da sala", "System",
      $curso,
      > 0);
      > else // O MANTEM NA LISTA
      > fputs($arq, $um_usuario);
      > }
      > fclose($arq);
      > }
      >
      >
      > Até aí, tudo bem. A lógica da coisa está ok. Porém, qdo tem na sala um
      número
      > muito grande de usuários, acima de 10/15 (as salas deveriam comportar até
      60),
      > as leituras e escritas no arquivo de usuários tornam-se críticas a um tal
      > ponto em que o sistema elimina usuários realmente online, embora esses
      > eliminados possam ainda interagir no chat - Isso que o tempo máximo de
      > permanência "ocioso" (sem rodar o loop de leitura de mensagens) é de 48s.
      sem
      > contar que, se um só usuário estiver no chat e sair em falso, esse
      mecanismo
      > não irá eliminá-lo, pois para isso precisa-se de pelo menos um usuário
      > presente na sala (para rodar o script "anti-fantasmas"). E a eliminação em
      > falso acontece mesmo qdo eu desativo esse sistema de eliminação de
      fantasmas.
      >
      > Alguém faz idéia de como os chats de grandes portais (Terra, UOL, etc.)
      tratam
      > esse problema dos "fantasmas", e como eles evitam o problema que eu estou
      > tendo com isso (eliminação em falso)?
      >
      > []'s,
      >
      >
      >
      > Fabio P. Zimmermann
      >
      > fabio.p.z@...
      > ICQ# 65524281
      >
      > "Não importa o que fizeram de você.
      > O que importa é o que você faz com aquilo que fizeram de você." - Sartre
      >
      >
      > ---- Ligações uteis PHP-PT ----
      > Para se retirar: php-pt-unsubscribe@egroups.com
      > Lista para questões mais difíceis: php-especialistas@egroups.com
      > Endereço geral da lista: http://br.egroups.com/group/php-pt
      > Componentes de programação em PHP: http://phpclasses.UpperDesign.com/
      >
      > Seu uso do Yahoo! Groups é sujeito às regras descritas em:
      http://docs.yahoo.com/info/terms/
      >