Como você faria?
Olá pessoal,
Estou implementando um sistema de atualização de dados, a logica seria mais ou menos igual ao DropBox, que automaticamente quando o outro usuário cria/altera/exclui todos os usuários recebem a atualização.
Qual a melhor maneira de se fazer isto ? sem consumir/comprometer muito o desempenho do sistema.
Seria um timer executado a tantos segundos, ou alguma outra forma?
Desde já agradeço a todos pela ajuda.
Desenvolvendo em C#..
Estou implementando um sistema de atualização de dados, a logica seria mais ou menos igual ao DropBox, que automaticamente quando o outro usuário cria/altera/exclui todos os usuários recebem a atualização.
Qual a melhor maneira de se fazer isto ? sem consumir/comprometer muito o desempenho do sistema.
Seria um timer executado a tantos segundos, ou alguma outra forma?
Desde já agradeço a todos pela ajuda.
Desenvolvendo em C#..
Estevão Giron
Curtidas 0
Respostas
Joel Rodrigues
22/02/2013
Olá.
Você pode utilizar a classe FileSystemWatcher, que fica "observando" uma pasta ou arquivo e sempre que ocorrerem alterações, ela gera uma notificação.
Veja esse link: [url]http://msdn.microsoft.com/pt-br/library/system.io.filesystemwatcher.aspx[/url].
Você pode utilizar a classe FileSystemWatcher, que fica "observando" uma pasta ou arquivo e sempre que ocorrerem alterações, ela gera uma notificação.
Veja esse link: [url]http://msdn.microsoft.com/pt-br/library/system.io.filesystemwatcher.aspx[/url].
GOSTEI 0
Estevão Giron
22/02/2013
Sobre o FileSystemWatcher, já estou usando...
Deixa eu tentar explicar melhor...
O Sistema funciona assim, Banco de Dados MYSQL Local, e Banco de Dados MYQSL Servidor, para comunicação estou usando WCF
A logica do sistema é o seguinte.
São varias tabelas que deverá ser sincronizadas ex: Clientes, Fornecedores, Fotos etc...
Hoje o sistema esta em pleno funcionamento, mas está funcionando assim o cliente precisa clicar em sincronizar os dados, quando sincroniza, ele verifica quais os dados que não foram atualizados e envia para o servidor, depois ele verifica no servidor quais os dados novos/alterados/exluidos e baixa a atualização...
O estou desenvolvendo um novo sistema de atualização onde deverá funcionar em background...onde não precisará mais clicar em sincronizar o próprio sistema irá enviar e receber as atualizações sem a necessidade de clicar em botão, deverá ser tudo automático. (Está logica é igual ao do Dropbox, não precisa clicar em nada, e automaticamente identifica as alterações e baixa)
Para enviar é facil, existem varias maneiras...inclusive estou usando o FileSystemWatcher para verificar se teve algum atualização local..
ex:
10 usuários que estão usando o software...
Usuário 1 - alterou o cadastro do João, automaticamente ele envia para o banco de dados....
Até aí sem problema...
O Problema esta sendo pra identificar se tem atualização a ser baixada ou não...
Os outros 9 usuários como irão saber se tem atualização a ser baixada....
Qual seria a melhor maneria usando um timer para verificar via WCF a cada X segundos se tem atualização no servidor? ou existe alguma outra forma de se fazer isto...
Deixa eu tentar explicar melhor...
O Sistema funciona assim, Banco de Dados MYSQL Local, e Banco de Dados MYQSL Servidor, para comunicação estou usando WCF
A logica do sistema é o seguinte.
São varias tabelas que deverá ser sincronizadas ex: Clientes, Fornecedores, Fotos etc...
Hoje o sistema esta em pleno funcionamento, mas está funcionando assim o cliente precisa clicar em sincronizar os dados, quando sincroniza, ele verifica quais os dados que não foram atualizados e envia para o servidor, depois ele verifica no servidor quais os dados novos/alterados/exluidos e baixa a atualização...
O estou desenvolvendo um novo sistema de atualização onde deverá funcionar em background...onde não precisará mais clicar em sincronizar o próprio sistema irá enviar e receber as atualizações sem a necessidade de clicar em botão, deverá ser tudo automático. (Está logica é igual ao do Dropbox, não precisa clicar em nada, e automaticamente identifica as alterações e baixa)
Para enviar é facil, existem varias maneiras...inclusive estou usando o FileSystemWatcher para verificar se teve algum atualização local..
ex:
10 usuários que estão usando o software...
Usuário 1 - alterou o cadastro do João, automaticamente ele envia para o banco de dados....
Até aí sem problema...
O Problema esta sendo pra identificar se tem atualização a ser baixada ou não...
Os outros 9 usuários como irão saber se tem atualização a ser baixada....
Qual seria a melhor maneria usando um timer para verificar via WCF a cada X segundos se tem atualização no servidor? ou existe alguma outra forma de se fazer isto...
GOSTEI 0
Joel Rodrigues
22/02/2013
Bom, nesse caso, acho que realmente é necessário usar um timer. Ponha esse processamento em uma thread concorrente da thread principal e se possível use chamadas assíncronas, para evitar travamento do sistema.
GOSTEI 0
Valter Furtado
22/02/2013
O servidor é gerenciado por você?? Se sim, por que não roda uma aplicação lá também... você tendo o ip dos usuários conseguiria (eu acho) enviar um comando de volta direto no ip para atualizar... tipo teria um serviço no servidor e um serviço no cliente.
GOSTEI 0
Robson Alves
22/02/2013
Você pode trabalhar com windows services.
Esse serviço fica na máquina, então independente do usuário estar logado ou não no sistema, o serviço fica encarregado de atualizar. O timer neste caso é indispensável.
[url]http://msdn.microsoft.com/pt-br/library/gg454586.aspx[/url]
Esse serviço fica na máquina, então independente do usuário estar logado ou não no sistema, o serviço fica encarregado de atualizar. O timer neste caso é indispensável.
[url]http://msdn.microsoft.com/pt-br/library/gg454586.aspx[/url]
GOSTEI 0
Estevão Giron
22/02/2013
Joel Rodrigues, realmente estava pensando em usar um timer, só quei pensei que teria alguma forma de o servidor avisar o cliente que tem atualização disponível...
Valter Furtado, Sim tenho um servidor dedicado, onde tenho total controle. Estava pensando em fazer esta comunicação entre tcp/ip mas o problema que este negocio de abrir porta, em alguns clientes existem regras, ou seja, firewall não permite.
Então estou pesando em fazer isto em wcf via http...
Robson Alves - RobsonAlves.net, realmente via windows service seria melhor, e estarei implementando no sistema...
Valter Furtado, Sim tenho um servidor dedicado, onde tenho total controle. Estava pensando em fazer esta comunicação entre tcp/ip mas o problema que este negocio de abrir porta, em alguns clientes existem regras, ou seja, firewall não permite.
Então estou pesando em fazer isto em wcf via http...
Robson Alves - RobsonAlves.net, realmente via windows service seria melhor, e estarei implementando no sistema...
GOSTEI 0
Frederico Filho
22/02/2013
Amigo, vou da uma dica aqui mas precisa ser validada para o seu cenário. Ainda não fiz testes neste nível, mas vc pode da uma pesquisada no html5 usando o websocket. Pelo pouco que li ele abstrai esta sua preocupação da comunicação entre cliente e servidor. Acredito inclusive que tem uma edição da .net magazine sobre este tema, mas infelizmente ainda não tive tempo de procurar sobre este assunto.
Vc pode da uma olhada neste link: http://www.html5rocks.com/en/tutorials/websockets/basics/
Se não me engano somente o IIS 8 é compatível com o websocket, tem de pesquisar
Tem um amigo meu que está desenvolvendo algo bem parecido, posso procurar mais informações sobre o projeto dele.
Qualquer coisa pode entrar em contato.
Espero ter ajudado.
Até mais.
Vc pode da uma olhada neste link: http://www.html5rocks.com/en/tutorials/websockets/basics/
Se não me engano somente o IIS 8 é compatível com o websocket, tem de pesquisar
Tem um amigo meu que está desenvolvendo algo bem parecido, posso procurar mais informações sobre o projeto dele.
Qualquer coisa pode entrar em contato.
Espero ter ajudado.
Até mais.
GOSTEI 0
Robson Alves
22/02/2013
Frederico neste caso, websocket seria a opção se as informações fossem todas web, mas ele tem que trabalhar com arquivos (pelo que entendi) ele pode implementar o web dele utilizando essa ideia, o qual tem o mesmo conceito da biblioteca abaixo.
http://signalr.net/
http://signalr.net/
GOSTEI 0
Estevão Giron
22/02/2013
Pessoal quero agradecer todos que postaram ai,
E cheguei a seguinte conclusao vou usar um serviço do windows, wcf e um thread que será executado a um determinado tempo....
O signalr... vai estar junto para um chat....
E cheguei a seguinte conclusao vou usar um serviço do windows, wcf e um thread que será executado a um determinado tempo....
O signalr... vai estar junto para um chat....
GOSTEI 0
Joel Rodrigues
22/02/2013
Valeu, Estevão. Boa sorte então.
Sendo assim, vou encerrar o tópico, beleza?
Sendo assim, vou encerrar o tópico, beleza?
GOSTEI 0
Estevão Giron
22/02/2013
ok....pode encerrar...
GOSTEI 0
Joel Rodrigues
22/02/2013
Obrigado pelo retorno.
Tópico encerrado.
Tópico encerrado.
GOSTEI 0