D3POD Posted November 10, 2016 at 05:25 PM Report #600302 Posted November 10, 2016 at 05:25 PM 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
apocsantos Posted November 10, 2016 at 05:34 PM Report #600303 Posted November 10, 2016 at 05:34 PM 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"
M6 Posted November 10, 2016 at 05:47 PM Report #600304 Posted November 10, 2016 at 05:47 PM 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."
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now