Question

Disons que j'ai deux applications qui doivent fonctionner ensemble dans une certaine mesure.

  1. Une application Web (PHP, Ruby on Rails, ...)
  2. Une application de bureau (Java, C ++, ...)

L'application Web doit être notifiée à partir de l'application Web et le délai entre l'envoi et la réception de la notification doit être court. (< 10 secondes)

Quelles sont les manières possibles de faire cela? Je peux penser à interroger dans un intervalle de 10 secondes, mais cela générerait beaucoup de trafic si plusieurs applications de bureau devaient être notifiées. Sur un réseau local, j'utiliserais une diffusion UDP, mais malheureusement, ce n'est pas possible ici ...

J'apprécie toutes les idées que vous pourriez me donner.

Était-ce utile?

La solution

Je pense que la & "meilleure pratique &"; Ici, cela dépendra du nombre de clients de bureau que vous comptez servir. S’il n’ya qu’un poste de travail à notifier, l’enquête peut être une bonne solution. Certes, l’enregistrement est beaucoup plus onéreux qu’une notification basée sur un événement, mais ce sera certainement la solution la plus simple à mettre en œuvre.

Si l'interrogation est vraiment inacceptable, je vois deux solutions de base:

  1. Laissez une connexion persistante ouverte entre le bureau et le serveur Web (par exemple, une requête Web & "; comète &"; de style, ou une connexion socket brut)
  2. Exposez un service depuis l'application de bureau et enregistrez l'adresse du service auprès du serveur Web. De cette façon, le serveur Web peut appeler le bureau si nécessaire.

Soyez averti, cependant - les deux alternatives sont pleines à craquer. Quelques points forts:

  • Maintenir une connexion ouverte peut être délicat, car vous voulez que vos serveurs Web soient remplaçables à chaud
  • Faire appel à un service externe (votre bureau, par exemple) à partir d'un serveur Web est dangereux, car cette requête pourrait se bloquer. Vous voudriez déplacer cette notification sur un thread séparé pour éviter d'attacher le serveur Web.

Pour atténuer certaines inquiétudes, vous pouvez dissocier le poste de travail non fiable du serveur Web en introduisant un serveur de notification intermédiaire. Le serveur Web peut publier une mise à jour quelque part et le bureau peut interroger / se connecter / s'inscrire à cet emplacement. être averti. Pour éviter de réinventer la roue, cela pourrait impliquer une sorte de système MessageQueue ... Ceci, bien sûr, ajoute à la complexité du besoin de maintenir le nouvel intermédiaire.

Encore une fois, toutes ces approches sont probablement assez complexes, je dirais donc que le sondage est probablement le meilleur choix.

Autres conseils

Je peux voir deux façons:

  • Votre application de bureau interroge l'application Web
  • Votre application Web notifie l'application de bureau

Votre application Web peut publier un flux RSS, mais votre application de bureau devra toujours interroger le flux toutes les 10 s.

Le trafic ne doit pas nécessairement être énorme: si vous utilisez un protocole HTTP HEAD , vous obtiendrez un petit paquet avec la date de la dernière modification (nommé commodément Dernière modification ).

Je ne sais pas exactement quoi faire pour mener à bien votre tâche, mais je peux suggérer de créer un service Windows sur le PC de l'application de bureau.

Ce service vérifie l'application Web à chaque intervalle de temps pour détecter de nouvelles modifications. Si des modifications sont apportées, il peut exécuter l'application de bureau avec notification de la modification de l'application Web et de l'application Web chaque fois que des modifications surviennent. accusé de réception

J'espère que cela peut être utile. Je ne l'ai pas essayé exactement, mais je suggère d'utiliser une telle idée.

Une couche de syndication aiderait à faire évoluer le système.

L'application de bureau peut s'enregistrer auprès d'un " publisher " service (s'exécutant sur plusieurs machines / plusieurs) Ce service d'éditeur reçoit la " notice " depuis votre application Web que quelque chose a changé et commence immédiatement à avertir tous ses abonnés inscrits.

Le nombre d'éditeurs dont vous avez besoin augmentera avec le nombre d'utilisateurs.

Modifier: vous avez oublié de mentionner que l'application de bureau devra écouter sur un socket.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top