Controle de Número de Conexões com o Banco através da Aplicação

Caros amigos,

Estamos com uma aplicação de um cliente no provedor King Host, porém o cliente acessa através de um IP dinâmico da net. A King Host liberou o acesso ilimitado para o tempo da conexão, com isto a aplicação do usuário não tem tempo de validade para ficar conectada.

Porém o provedor esta bloqueando o IP do cliente a cada 5 dias, avisando que chegou a 255 conexões é o limite, ai ele bloqueia o IP as conexões são zeradas e quando eu solicitou o desbloqueio volta ao normal.

Creio que algum amigo, já fez um controle no login do SC da Aplicação para controlar se o usuário já esta com uma conexão aberta ou não e se tiver zerar ele e relogar com o mesmo usuário.
Pois muitos usuários não usam o botão sair da aplicação, fechando no X, e neste caso a conexão fica aberta.

Seria como hoje o SC, caso fecharmos o SC sem sair corretamente ao entrar ele mostra que tem uma conexão aberta, e vc pode derrubar ela.

Agradeço a ajuda.

Adeilson de Oliveira

Eu não entendi porque você esta usando conexão persistente… isso zica mesmo!! Se você tiver acesso ao cron do linux ou agendador de tarefas do windows se for server windows é só matar o processo do mysql e iniciar novamente… pode fazer isso por exemplo todo dia as 0h.

Caros amigos,
No fórum tem um artigo falando de algo parecido com controle e dica passado pelo Haroldo

http://forum.scriptcase.com.br/index.php/topic,459.0/topicseen.html

Porém o problema seria quando o usuário fechar a aplicação no browser direto a sua conexão ficará aberta, e ao tentar entrar novamente vou conseguir saber que ele esta logado, e como proceder para fechar a conexão antiga derrubando e fazendo ele logar com uma nova, sem afetar a aplicação com demais usuários?

Adeilson de Oliveira

Saulo,

O Cliente nos convenceu que a necessidade da aplicação ficar permanente era porque muitas vezes o usuário ficava com a tela do cadastro de entrada de estoque aberta e saia para pegar informações de logística de entrada e algumas vezes ultrapassava o tempo e perdia a tela com a digitação.
Pois na King eu não tenho o controle por tempo, eu tinha solicitado para eles um tempo de 2 horas, porém é um padrão ou ilimitado como esta agora.

Na sua sugestão então eu faria um cron (Linux) para Restartar o Mysql, assim todas as conexões seriam encerrada ? Um dúvida em PHP, a conexão em PHP abertas são diferentes da conexão com o Banco?
Pois o provedor me alertou que a aplicação do cliente chegou a 255 conexões, fiquei pensando como, pois o cliente só tem 3 computadores!

OBS: Amigos na aplicação SC, o botão [ Sair ] já vem na programação interna do SC para ele fechar (destruir) a sessão? exmplo:
session_destroy(); // Destrói toda sessão

Adeilson de Oliveira

Então conexão no mysql é tudo uma coisa só… melhor dizendo quem dizao mysql pra não matar a conexão é o php, e se você define o php com conexão persistente o que acontece, a sessão do php deve estar expirando e a do mysql fica presa, aí ele mantém a conexão no mysql o cara volta e entra de novo, o php deveria verificar se existe essa conexão e não criar outra, mas esse comportamento embora seja o padrão pode ser alterado e modificado de acordo com o ambiente, aí é criada uma nova conexão no mysql…que fica presa também… e esse ciclo continua mesmo que seja o mesmo cara… (seria bom verificar seu php.ini e as configs do mysql do provedor) o que eu faria, desabilitaria a conexão persistente no mysql / php (veja neste artigo que as vantagens de conexões persistente não se justificam http://php.net/manual/pt_BR/features.persistent-connections.php) e faria uma aplicação que de tempos em tempos faça uma requisição simples ao sistema mantenha a conexão do cara ativa, se for uma tela em específico você pode usar um container com refresh.

Saulo,
Depois de horas com o provedor King, chegamos a forma exata de trabalho deles:

Forma número 01: Padrão

  • PH53, a sessão do usuário é encerrada pelo fechamento do Browser, porém a conexão com o mysql tem um limite de 5 minutos, caso o usuário não se conectar a nenhuma tabela a conexão é encerrada

Forma número 02: Por Solicitação

  • PH53, a sessão do usuário fica aberta direto, a conexão do banco não é encerrada, porém neste formato o provedor quando chega a 255 conexões ele trava, e o IP do cliente é bloqueado. Neste caso para o cliente é melhor pois ele não fica fechando e precisando se logar, e não perde alguns dados que por ventura deixou na tela sem salvar por estar fazendo outra tarefa.

O Acesso ao mysql para poder restart através de uma tarefa não é possível por servidores compartilhado. O suporte me orientou para que eu controlasse o número de conexões dos usuários ao banco.

Sabemos também que a nossa aplicação que esta com este cliente foi feita em sc5.2 e estamos trabalhando para migrar para sc6.0 Porém estamos com este problema poderia nos ajudar?

Adeilson de Oliveira

Adesoft, me adiciona no skype: saulobborges.