Pergunta

Digamos que eu tenho duas aplicações que têm de trabalhar em conjunto para um certo ponto.

  1. A aplicação web (PHP, Ruby on Rails, ...)
  2. A aplicação desktop (Java, C ++, ...)

A aplicação desktop tem de ser notificado da aplicação web e o atraso entre o envio e recebimento de notificação deve ser curto. (<10 segundos)

Quais são as possíveis maneiras de fazer isso? Eu posso pensar de votação em um intervalo de 10 segundos, mas que iria produzir muito tráfego se muitas aplicações de desktop devem ser notificados. Em uma LAN eu usaria uma transmissão UDP, mas infelizmente isso não é possível aqui ...

Eu aprecio qualquer idéia que você poderia me dar.

Foi útil?

Solução

Eu acho que o "melhor prática" aqui vai depender do número de clientes de desktop que você espera para servir. Se há apenas uma área de trabalho para ser notificado, então polling pode muito bem ser uma abordagem bem -. Sim, polling é muito mais sobrecarga do que uma notificação baseada em eventos, mas certamente vai ser a solução mais fácil de implementar

Se a sobrecarga de polling é verdadeiramente inaceitável, então eu vejo duas alternativas básicas:

  1. Mantenha um aberto conexão persistente entre o desktop e web-servidor (poderia ser um "cometa" solicitação da web de estilo, ou uma conexão socket raw)
  2. Expor um serviço de dentro do aplicativo desktop, e registrar o endereço do serviço com o servidor web. Desta forma, o servidor web pode chamar para a área de trabalho, conforme necessário.

Esteja avisado, embora - ambas as alternativas estão repletos de armadilhas. Alguns destaques:

  • Manter um aberto conexão pode ser complicado, já que você quer que seus servidores web para ser hot-swappable
  • Chamando a um serviço externo (por exemplo, seu desktop) a partir de um servidor web é perigoso, porque este pedido poderia pendurar. Você iria querer mover esta notificação em um segmento separado para evitar amarrar o servidor Web.

Para atenuar algumas das preocupações, você pode dissociar o ambiente de trabalho não confiável do servidor web através da introdução de um servidor de notificação intermediário - o servidor web poderia postar um lugar de atualização, eo desktop poderia sondar / connect / registrar lá para ser notificado. Para evitar reinventar a roda aqui, isso pode envolver algum tipo de sistema MessageQueue ... Isto, naturalmente, acrescenta a complexidade da necessidade de manter o novo intermediário.

Mais uma vez, todas essas abordagens são, provavelmente, bastante complexo, então eu diria sondagem é provavelmente a melhor aposta.

Outras dicas

Eu posso ver duas maneiras:

  • seu desktop pesquisas de aplicação da aplicação Web
  • seu aplicativo web notifica o aplicativo de desktop

Seu aplicativo web poderia publicar um feed RSS, mas o seu aplicativo de desktop ainda terá de pesquisar a alimentação a cada 10 s.

A necessidade tráfego não ser enorme: se você usar um HTTP pedido HEAD , você vai ter um pequeno pacote com a data da última modificação (convenientemente chamado Last-Modified ).

Eu não sei exatamente o que fazer para alcançar a sua tarefa, mas o que posso sugerir para criar um serviço do Windows no PC aplicação desktop.

Este serviço verifica a aplicação web a cada intervalo de tempo para novas mudanças e se mudanças ocorreram ele pode executar o aplicativo de desktop com a notificação de que há uma mudança na aplicação web e na aplicação web quando qualquer occurrs mudança que você pode resposta com reconhecimento

Espero que esta pode ser que eu útil não experimentá-lo exatamente, mas eu estou sugerindo usando como esta idéia.

A camada de distribuição iria ajudar a dimensionar o sistema.

O aplicativo de desktop podem registar-se com um serviço de "publisher" (em execução em um dos vários / muitas máquinas) Este serviço publisher recebe o "aviso" de seu aplicativo web que algo mudou, e imediatamente começa a notificar todos os seus registrada assinantes.

O número de editores que você precisa irá aumentar com o número de usuários.

Edit:. Esqueci de mencionar que o aplicativo de desktop terão de escuta em um soquete

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