Pergunta

Atualmente estou poupando alguns dados do Twitter em MySQL. Meu anfitrião só me permite executar tarefas agendadas a cada hora, de modo a resultados em tempo real semi-simulados, eu copiei o mesmo arquivo 6 vezes, e executar uma a cada 10 minutos (o anfitrião deixa você controlar a hora offset). Isso é estúpido, eu acho.

Existe algum mecanismo que posso aprender sobre que iria empurrar os dados do meu jeito? Quaisquer pensamentos ou sugestões bem-vindos.

(Eu guiou-me longe apenas consultando o seu servidor com cada exibição de página, eu sei o suficiente para saber que é má prática)

Foi útil?

Solução

Como sobre o acesso a uma página web (que por sua vez executa o programa) hospedado no servidor, adicionando a cron no lado do cliente (sistema de home):

/usr/bin/curl http://yourserver.com/twitter

Caso contrário, você pode executar o seguinte script bash cada hora:

#!/bin/bash

for (( i = 0; i < 6; i += 1 )); do
    /usr/bin/curl 'http://yourserver.com/twitter'
    sleep 600
done

Outras dicas

Você pode sanely puxar Twitter dados desencadeadas a partir de seus pedidos. É um pouco esotérico, mas os dados essencialmente você armazenar bloqueio em uma tabela para garantir apenas um pedido urnas a dados do Twitter a cada N minutos (ou sempre que você precisar). Exemplo:

  1. Pedido verifica se as necessidades de dados novo Twitter para ser recuperada
  2. tabela Verifique bloqueio para ver se outra solicitação já está falando Twitter
  3. Adicionar registro à tabela de bloqueio. Certifique-se de especificar os dados em uma coluna que é definida como única via uma restrição de banco de dados. Isto irá mantê-lo de fazer duas fechaduras.
  4. Fale com o Twitter, salvar os dados do Twitter.
  5. registro Remove bloqueio

Para a velocidade, garantir a sua mesa de bloqueio está na memória ou o uso memcached em seu lugar. Claro, se você pode usar memcached provavelmente você tem total controle sobre cron qualquer maneira. :)

Uma solução relativamente simples é executar um trabalho cron em outro computador. Ele faria os pedidos de Twitter, em seguida, executar um HTTP POST para uma página designada no servidor (por exemplo http://foo.com / latestTwitterData ). Claro, você gostaria de ter a autenticação para evitar porcaria aleatória sendo enviado a você.

Eu não sei se isso é razoável para sua situação.

É muito fácil de executar código cada segundo ou assim.

// pseudocode
while(1) {
    // do request

    // sleep 1 second
    sleep(1);
}

Por que não basta colocar um loop while em seu programa e depois dormir N segundos entre no entanto tempo você precisa as atualizações? Você pode, então, morrer depois de 59 minutos e 30 segundos.

Como alternativa, para otimizar a reprodução de vários arquivos, você pode adicionar várias chamadas para o seu programa dentro da linha cron única. Algo como:

./prog.pl; sleep 60; ./prog.pl

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