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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top