Limitar quantidade de usuários no sistema
Prezados amigos do fórum,
A dúvida é a seguinte:
Como limitar a quantidade de usuários que usam o sistema na rede?
Já vi outros tópicos em alguns fóruns que acharam que estavam com a solução... mas ainda restou uma dúvida:
A idéia seria criar um arquivo, e com esse arquivo armazenar qdo o usuário entrasse no sistema.
Então sempre q se logasse um usuário, se criaria um novo registro onde gravaría-se o usuário e a data e hora;
POIS BEM!
A idéia é até boa. então qdo se atingisse o limite, nao seria permitido que outro usuário usasse o sistema, até que algum usuário logado saísse do programa, e aí se apagaria o registro no arquivo.
Porém teríamos 1 pequeno problema que ninguem diz como resolver:
E se o sistema travasse e o usuário nao pudesse sair dele normalmente??
ou ainda: Se o windows travar e o registro também ficar gravado???
O registro não seria apagado, e portanto, o raciocínio se perde todo...
Alguém teria a solução e poderia nos ajudar nessa idéia??
A dúvida é a seguinte:
Como limitar a quantidade de usuários que usam o sistema na rede?
Já vi outros tópicos em alguns fóruns que acharam que estavam com a solução... mas ainda restou uma dúvida:
A idéia seria criar um arquivo, e com esse arquivo armazenar qdo o usuário entrasse no sistema.
Então sempre q se logasse um usuário, se criaria um novo registro onde gravaría-se o usuário e a data e hora;
POIS BEM!
A idéia é até boa. então qdo se atingisse o limite, nao seria permitido que outro usuário usasse o sistema, até que algum usuário logado saísse do programa, e aí se apagaria o registro no arquivo.
Porém teríamos 1 pequeno problema que ninguem diz como resolver:
E se o sistema travasse e o usuário nao pudesse sair dele normalmente??
ou ainda: Se o windows travar e o registro também ficar gravado???
O registro não seria apagado, e portanto, o raciocínio se perde todo...
Alguém teria a solução e poderia nos ajudar nessa idéia??
Wagner Fernandes
Curtidas 0
Respostas
Thiago Cruz
11/06/2010
Bom dia!
para vc poder limitar a qunatidade de usuarios no sistema tem duas opçoes
1 - fazer o controle pelo banco.
Como: crie uma tabela de log de usuario e faz a verificação todo vez q um usuario logar
2 - Utilizar sistema em 3 camadas.
Como: o sitema servidor faz a contagem de usuario, todo vez q o usuario logar gravar um log no servidor.
GOSTEI 0
Wagner Fernandes
11/06/2010
Thiago,
Mas é exatamente esse o problema de utilizar a opção 1.
Criando a tabela e fazendo o log.
O problema é se a aplicação ou o computador travar, aí o usuário nao se desconecta, e como o controle é para a quantidade de pessoas usando o sistema, ele já vai estar logado, e se outro usuário entrar ele vai ficar prendendo a vez de outro usuario.
Alguém pode passar uma idéia da lógica então?
Abraço a todos..
Mas é exatamente esse o problema de utilizar a opção 1.
Criando a tabela e fazendo o log.
O problema é se a aplicação ou o computador travar, aí o usuário nao se desconecta, e como o controle é para a quantidade de pessoas usando o sistema, ele já vai estar logado, e se outro usuário entrar ele vai ficar prendendo a vez de outro usuario.
Alguém pode passar uma idéia da lógica então?
Abraço a todos..
GOSTEI 0
Fábio Cruz
11/06/2010
Vc trabalha com servidor de aplicação?
Acho que isso se resolveria se vc tivesse um server (em algum servidor do Cliente) que ficasse conversando com algum client (maquina do usuário) no momento que essa comunicação fosse interrompida, ele liberaria uma licença para uso.
Isso ajudaria também para barrar o usuário instalar o programa em algum outro terminal não autorizado por vc.
Acho que isso se resolveria se vc tivesse um server (em algum servidor do Cliente) que ficasse conversando com algum client (maquina do usuário) no momento que essa comunicação fosse interrompida, ele liberaria uma licença para uso.
Isso ajudaria também para barrar o usuário instalar o programa em algum outro terminal não autorizado por vc.
GOSTEI 0
Wagner Fernandes
11/06/2010
Valeu pela dica FACC,
mas infelizmente nao da pra fazer isso em todos os clientes.
A idéia era achar essa solução que o proprio DELPHI controle tudo sozinho...
Alguém ja fez isso com o Delphi???
São diversas os anúncios sobre sistemas que dizem q são cobrados pela quantidade de máquinas q acessa o sistema. Mas ja pesquisei bastante e ainda não achei uma solução, que o Delphi controle sozinho, que seja boa realmente....
Alguém tem software funcionando assim???
mas infelizmente nao da pra fazer isso em todos os clientes.
A idéia era achar essa solução que o proprio DELPHI controle tudo sozinho...
Alguém ja fez isso com o Delphi???
São diversas os anúncios sobre sistemas que dizem q são cobrados pela quantidade de máquinas q acessa o sistema. Mas ja pesquisei bastante e ainda não achei uma solução, que o Delphi controle sozinho, que seja boa realmente....
Alguém tem software funcionando assim???
GOSTEI 0
Adalberto Brasaca
11/06/2010
Vou dar uma idéia... Talvez seja o início de algo.
Se você tem a sua aplicação instalada em uma máquina com Windows Server e nos clientes você somente aponta o caminho para a aplicação no servidor criando um atalho, provavelmente daria para fazer o seguinte, se não forem muitas licenças simultâneas que você quer liberar: utilizando Terminal Services, você manda para as máquinas clientes somente as telas da sua aplicação, deixando toda instância (cópia) ser processada no próprio servidor. Assim, todas as instâncias (cópias) do seu aplicativo ficaram rodando somente na memória de uma máquina (servidor). Problema resolvido !!! Sua aplicação deverá, na carga, acessar e contar quantas cópias já estão na memória... Se já tiver chegado ao número total, dará uma mensagem ao usuário e abortará a inicialização dessa nova cópia. O único inconveniente é que, se uma máquina cliente "travar", alguém deverá matar o processo no servidor para liberar a "licença" e não ter que abrir o banco de dados de controle. Espero ter ajudado de alguma forma...
GOSTEI 0
Wagner Fernandes
11/06/2010
Valeu pela dica tbm amigo!!!
A idéia é interessante...
Porém, abri a discussão akii novamente, exatamente pra ver se alguém tem a solução considerando exatamente a possibilidade do travamento....
Alguém mais se pronuncia???
GOSTEI 0
Alexandre Martinez
11/06/2010
Vamos analisar quem pode solucionar o problema quando ele ocorre.
É preciso que esteja registrado em algum lugar o último acesso que um determinado usuário fez ao sistema. Se será um arquivo, um banco de dados ou outra forma fica a seu critério.
Esta informação deve estar em uma área de acesso comum, ou seja, no servidor, pois uma máquina cliente travada não me informa nada.
Então imaginemos uma situação em que a máquina cliente travou e a informação do último acesso deste cliente (data e hora) está registrado no servidor. Neste ponto temos duas opções: 1 - O servidor, baseado nesta informação, libera a conexão dos usuários inativos há mais de 5 minutos (arbitrei este tempo). Obviamente haverá um processo no servidor fazendo esta verificação em um intervalo de tempo determinado (sugiro 6 minutos), ou
2 - Quando o próximo cliente tentar se conectar e o número de conexões tiver chegado ao máximo, será liberada a conexão que estiver inativa há mais tempo. Nas duas situações será preciso atualizar a informação do último acesso do cliente a cada requisição que ele fizer. Talvez isso seja um inconveniente. Mas de que outra forma obterei essa informação? Ela é a chave para o controle que vc quer fazer.
Estas são as duas situações que vislumbro. Uma coisa é certa: se o delphi não faz isso de forma automática, sobrou pra vc. Um abç.
Esta informação deve estar em uma área de acesso comum, ou seja, no servidor, pois uma máquina cliente travada não me informa nada.
Então imaginemos uma situação em que a máquina cliente travou e a informação do último acesso deste cliente (data e hora) está registrado no servidor. Neste ponto temos duas opções: 1 - O servidor, baseado nesta informação, libera a conexão dos usuários inativos há mais de 5 minutos (arbitrei este tempo). Obviamente haverá um processo no servidor fazendo esta verificação em um intervalo de tempo determinado (sugiro 6 minutos), ou
2 - Quando o próximo cliente tentar se conectar e o número de conexões tiver chegado ao máximo, será liberada a conexão que estiver inativa há mais tempo. Nas duas situações será preciso atualizar a informação do último acesso do cliente a cada requisição que ele fizer. Talvez isso seja um inconveniente. Mas de que outra forma obterei essa informação? Ela é a chave para o controle que vc quer fazer.
Estas são as duas situações que vislumbro. Uma coisa é certa: se o delphi não faz isso de forma automática, sobrou pra vc. Um abç.
GOSTEI 0