Jump to content

Recommended Posts

Posted

Boas, tenho uma duvida que gostava de ver esclarecida antes de avançar mais no projeto que estou a fazer, para caso haja alguma coisa que deva fazer de maneira diferente, começar já.

Estou a fazer um programa que está a funcionar normalmente na rede local da empresa.

Para conseguir aceder remotamente criei uma VPN (resolvi outros problemas) e já consegui aceder entre os dois locais.

O problema é que a internet é bastante lenta e instável.

Queria uma solução que de alguma forma ambas as partes conseguissem aceder sem necessidade de internet constante e que ao mesmo tempo fizesse a sincronização quando houvesse internet.

Desta forma pensei em criar para cada local um "série"... série A e B.

Cada um gravaria localmente e numa thread separada da principal gravaria numa base de dados num web server.

 

O importante é de x em x tempo a aplicação tem que tentar ligar ao servidor e fazer um sincronismo para ver se existem coisas novas e tentar gravar as que ainda não foram possíveis.

 

A ajuda que preciso é tentar perceber se isto é possível utilizando threads, se existe outra forma mais fácil ou mais adequada e obviamente, perante a vossa experiencia, se existe alguma conselho.

A ideia é funcionar quase como um software de faturação que tem várias lojas sincronizadas.

 

Cumprimentos,

D3POD

Posted

Boa tarde,

Porque não usar agendamento de tarefas ? De X em X tempo verifica se tem ligação e caso tenha, transmite os dados. Caso não tenha, não transmite, e espera pela próxima tentativa?

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Se os dados estiverem a ser guardados em SQL Server vê os mecanismos de sincronização que existem.
A última vez que utilizei funcionava bastante bem neste cenário:

 1. dispositivo estava desligado da rede e usava base de dados local
 2. quando se encontrava na rede local (ou com acesso à rede onde está a base de dados central), inicia o mecanismo de sincronização do SQL Server
 3. dispositivo pode ser desligado da rede e vai-se embora com toda a informação sincronizada

Se isto não foi uma hipótese, "basta" que (todo) o teu modelo de dados tenha o registo da máquina e timestamp da última atualização (eg nome da máquina, mac address, etc., qualquer coisa única) e assim podes fazer inserts/updates/deletes. Se tiveres uma tabela de controlo com o timestamp da última sincronização por máquina saberá que operações necessitas de fazer. Tem em atenção que deve ser atómico, ou seja, quando sincronizas levas toda a informação necessária para a integridade de um registo.

Não só podes usar threads para isto, como podes incluir um temporizador, por exemplo, a cada 10 minutos verificas se existe condições para fazeres a sincronização (ligação de rede, acesso ao servidor, latência, qualquer outra coisa que aches relevante). Havendo condições podes arrancar com o processo de sincronização com a duração máxima de, por exemplo, 1 minuto. Se durante esse minuto a sincronização concluiu, tudo bem, caso contrário registas na tabela de sincronização o timestamp da última coisa sincronização de um registo (tendo em conta a tal atomicidade para garantir a integridade). Dai a 10 minutos, volta a executar tudo de novo e, havendo condições para sincronizar, arrancas onde havias terminado anteriormente.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.