Diferença nos tempos de servidor
Pergunta
Estou desenvolvendo um site que irá recuperar mensagens SMS que foram enviadas a um gateway. O gateway é acessado através de uma API, com as solicitações no seguinte formato:
http://www.smsgateway.com/?login=myusername&password=mypassword&lasttime=1236164238
Observe que eu estou tendo para acompanhar a última vez que as mensagens foram baixadas -. Somente as mensagens recebidas após esse tempo são devolvidos
O problema é que há uma diferença de tempo de cerca de 5 minutos entre os servidores! Aqui está o que está acontecendo:
-> usuário envia SMS; servidor gateway timestamps-lo em 11:00 (digamos que o tempo real é 10:55)
-> Meu servidor solicita todas as mensagens enviadas a partir de 10,56 em diante - recebe a mensagem acima e adiciona-lo ao banco de dados
-> Meu servidor solicita todas as mensagens enviadas a partir de 10,58 em diante - recebe a mensagem acima e adiciona-lo novamente, uma vez que é timestamped em 11:00
-> Meu servidor envia outro pedido, às 11h00 - recebe a mensagem e adiciona-lo para o banco de dados mais uma vez
Então, o meu problema é que a mensagem original está sendo recebido 3 vezes.
Alterar o tempo do meu servidor é capaz de fazer, mas não os servidores remotos.
Como posso lidar com isso sem verificar para ver se a mensagem já está no banco de dados?
Solução
Quando você receber as mensagens enviadas a partir de 10,56 em diante, Verifique a última vez mensagem: Diga 11:00 a.m, seguida Próxima chamada apenas enviar apenas às 11:00 a.m porque você já tinha recebido até 11:00 a.m de tempo do servidor. Desta forma, você pode reduzir suas pesquisas. Mesmo que isso vai funcionar para quando o tempo do servidor está na condição inversa.
ie) Verifique se há tempo de última mensagem:
na próxima verificação de pesquisa do tempo de última mensagem.
Outras dicas
A configuração básica é atrevido, mesmo se você manter os relógios dos dois servidores em sincronia você vai perder ou dobrar-se sobre as mensagens que partilhar timestamps (que podem ser muitos ou poucos dependendo da resolução timestamp e tráfego de mensagens).
Você nem precisa de uma API diferente para acessar as mensagens ou você tem que pedido sobreposição de mensagens solicitando mensagens desde latest_processed_timestamp - 1
e resolver as duplicatas do seu lado.