Frage

Lassen Sie uns sagen, dass ich zwei Anwendungen haben, die zusammen zu einem gewissen Grad arbeiten.

  1. Eine Web-Anwendung (PHP, Ruby on Rails, ...)
  2. Eine Desktop-Anwendung (Java, C ++, ...)

Die Desktop-Anwendung hat von der Web-Anwendung und die Verzögerung zwischen dem Senden und Empfangen der Meldung kurz sein muss angemeldet werden. (<10 Sekunden)

Was sind mögliche Wege, dies zu tun? Ich kann in einem 10-Sekunden-Intervall der Wahl denken, aber das würde viel Verkehr erzeugen, wenn viele Desktop-Anwendungen benachrichtigt werden müssen. In einem LAN würde ich einen UDP-Broadcast verwenden, aber leider hier, das ist nicht möglich ...

Ich schätze irgendwelche Ideen könnten Sie mir geben.

War es hilfreich?

Lösung

Ich denke, die „best practice“ hier auf der Anzahl der Desktop-Clients abhängen, Sie zu dienen erwarten. Wenn es nur ein Desktop benachrichtigt werden, dann gut Polling kann ein feiner Ansatz sein -. Ja, Polling ist viel mehr Aufwand als eine ereignisbasierte Benachrichtigung, aber es wird sicherlich die einfachste Lösung zu implementieren

Wenn der Aufwand für Polling wirklich nicht akzeptabel ist, dann sehe ich zwei grundlegende Alternativen:

  1. Halten Sie eine persistente Verbindung offen zwischen dem Desktop und Web-Server (könnte eine „Komet“ -Stil Web-Anfrage oder eine Raw-Socket-Verbindung sein)
  2. Expose einen Dienst innerhalb des Desktop-App, und die Adresse des Dienstes mit dem Web-Server registrieren. Auf diese Weise, der web-Server kann auf den Desktop ruft nach Bedarf.

Seien Sie gewarnt, wenn auch - beide Alternativen voller gotchas Unterlegkeil sind. Einige Highlights:

  • eine Verbindung zu halten öffnen kann schwierig sein, da Sie Ihren Web-Server sein wollen hot-swappable
  • an einen externen Dienstleister Ausruf (zB Ihr Desktop) von einem Web-Server ist gefährlich, weil diese Anforderung konnte hängen. Sie wollen würden diese Benachrichtigung auf einen separaten Thread bewegen, um den Web-Server zu vermeiden, zu binden.

, um einige der Bedenken zu mildern, könnte man den unzuverlässigen Desktop aus dem Web-Server entkoppeln durch einen Vermittler Benachrichtigungsserver Einführung - die Web-Server ein Update irgendwo posten könnte, und der Desktop könnte abfragen / connect / registrieren dort Lass dich erinnern. Um zu vermeiden, hier das Rad neu erfinden, das eine Art von Messagesystem verbunden sein könnte ... Das ist natürlich, fügt die Komplexität, um die neuen Vermittler aufrecht zu erhalten.

Auch hier sind alle diese Ansätze wahrscheinlich recht komplex, so würde ich sagen, Polling wahrscheinlich die beste Wette ist.

Andere Tipps

Ich kann auf zwei Arten sehen:

  • Ihre Desktop-Anwendung fragt der Web-App
  • Ihr Web-App benachrichtigt die Desktop-Anwendung

Ihre Web-App einen RSS-Feed veröffentlichen können, aber Ihre Desktop-App noch den Feed alle 10 s abfragen müssen.

Der Verkehr muss nicht riesig sein: wenn Sie einen HTTP verwenden HEAD Anfrage, werden Sie ein kleines Paket mit dem Datum der letzten Änderung (einfach den Namen Last-Modified ) erhalten.

Ich weiß nicht genau, was zu tun, um Ihre Aufgabe zu erreichen, aber ich kann vorschlagen, einen Windows-Dienst auf dem Desktop-Anwendung PC zu erstellen.

jedes Zeitintervall

Dieser Dienst prüft die Web-Anwendung für neue Änderungen und wenn Änderungen aufgetreten ist, kann es die Desktop-Anwendung mit der Meldung führt, dass es eine Änderung in der Web-Anwendung ist und in der Web-Anwendung, wenn eine Änderung, die Sie Antwort können occurrs mit Bestätigung

Ich hoffe, dass dies nützlich sein kann ich es nicht genau ausprobiert habe, aber ich bin darauf hindeutet, wie diese Idee verwenden.

Eine Schicht aus Syndizierung würde helfen, das System zu skalieren.

Die Desktop-Anwendung kann sich registrieren mit einem „Verlag“ (auf einer von mehreren / vielen Maschinen ausgeführt wird) Dieser Verlag Service erhält den „Hinweis“ von Ihrer Web-Anwendung, die sich etwas geändert hat, und beginnt sofort mit all seinen registrierten anmelde Abonnenten.

Die Zahl der Verlage Sie müssen mit der Anzahl der Benutzer erhöhen.

Edit: Vergessen zu erwähnen, dass die Desktop-Anwendung auf einem Socket hören muß

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top