it-swarm.com.de

Bessere Möglichkeiten als herkömmliche Abfragemethoden

Ich bin derzeit in einer AngularJS/Javascript-Umgebung.

Derzeit verwendet die Anwendung die Abfragemethode (d. H. Um neue Daten in einer festgelegten Anzahl von Sekunden vom Server abzurufen).

Dies ist ziemlich anstrengend und ruft das neueste Ergebnis nicht sofort ab. Angenommen, der Server verwendet ASMX für Webservice-Funktionen und wie kann ich die Anwendungseffizienz besser verbessern, wenn dies ohne größere Überarbeitung möglich ist?

Bearbeiten 1:

Mit Steuern meine ich, dass der Server verschiedene SQL-Tabellen und zugehörige Daten und Dinge aufrufen müsste, was eine komplexe Datenverarbeitung bedeutet. Wenn viele Benutzer gleichzeitig anwesend sind, befürchte ich, dass es in Zukunft möglicherweise Probleme mit der Serverleistung geben könnte.

Die neuesten Daten werden nicht abgerufen, da die Anwendung derzeit https vom Typ Anfrage-Antwort https verwendet.

Ich kann mich auf der Seite der mobilen Anwendungen weiter verbessern, kann aber auf der Serverseite abgesehen von den Webservice-Dateien des Servers nicht viel ändern.

10
Gene

Wenn mit "traditionell" gemeint ist, dass jeder Client den Server so oft wie möglich hämmert, kann ich auf architektonischer Ebene helfen.

Das geeignete Design hängt davon ab, wo Ihr Server in dieses Raster fällt:

Control \ Resources : Sufficient | Insufficient
Customizable        :     SC     |     IC
Untouchable         :     SU     |     IU
  • SC: Lassen Sie den Server dem Beobachtermuster folgen. Ermöglichen Sie Kunden, sich als Beobachter zu registrieren.

  • IC: Erlaube nur einem Proxy-System, sich beim Server zu registrieren. Kunden registrieren sich beim Proxy.

  • SU: Erlauben Sie nur einem Proxy-System, den Server abzufragen. Kunden registrieren sich beim Proxy.

  • IU: Erlauben Sie nur einem Proxy-System, den Server abzufragen. Kunden registrieren sich beim Proxy.

Ein Proxy, der dem Beobachtermuster folgt, kann sowohl Anpassungs- als auch Ressourcenprobleme lösen. Dies funktioniert über das Internet genauso gut wie zwischen Objekten. Wenn Sie sich registrieren, möchten Sie angerufen werden, wenn etwas passiert. Hören Sie auf einen Port und Sie sind bereit, angerufen zu werden. Ajax, REST, UDP, was auch immer.

Das Problem beim Abrufen besteht darin, dass der Beobachter steuert, wann der Anruf erfolgt, jedoch nicht weiß, wann sich der Status ändert, sodass viele unnötige Anrufe getätigt werden. Dies verbraucht Ressourcen, insbesondere wenn es viele Beobachter gibt. Der Schlüssel zum Umgang mit Abstimmungen liegt darin, die Richtung der Anrufe so schnell wie möglich vom Punkt der Zustandsänderung zum Beobachter zu bringen. Dann kommen Anrufe, wenn sie gebraucht werden. Nicht wenn sie nicht sind.

Wenn Sie Abrufanrufe haben, die folgendermaßen ablaufen:

  • Server <=== Viele Beobachter

All dies wäre ein besserer Weg, um Änderungen zu erkennen:

  • SC: Server ===> Viele Beobachter

  • IC: Server ===> Ein Proxy ===> Viele Beobachter

  • SU: Server <=== Ein Proxy ===> Viele Beobachter

  • IU: Server <=== Ein Proxy ===> Viele Beobachter

10
candied_orange

Sie können Server-Sent-Events als Alternative zum Polling verwenden.

Anstatt Ihren Server alle n Sekunden nach neuen Daten zu fragen, öffnen Sie eine dedizierte Verbindung und lassen Sie Ihre neuen Daten senden, sobald sie verfügbar sind!

Die Verbindung bleibt geöffnet, bis sie entweder vom Client oder vom Server (oder durch deren plötzliche Beendigung) explizit geschlossen wird.

Sie können Ihren Server so einrichten, dass Daten in festgelegten Intervallen oder zu bestimmten Zeiten auf Ihrem Server an Ihren Client gesendet werden (z. B. wenn ein Objekt den Status ändert oder wenn ein Scheduler einen Job auslöst oder wann).

Sie können verschiedene Ereignistypen definieren und verschiedene Routinen unterschiedliche Ereignistypen behandeln lassen.

Auf der Serverseite können Sie eine Warteschlange mit Benutzern halten, die derzeit Ihren Anwendungs-/Ereignistyp abonniert haben. Wenn ein Ereignis erstellt wird, sendet Ihr Server es an alle Benutzer in der Warteschlange. Frameworks wie Jersey2 implementieren diesen Ansatz bereits mit einem Broadcaster-Objekt .

Auf der Clientseite müssen Sie ein Dienst, der vom Server gesendete Ereignisse auf einer bestimmten URL abhört schreiben.

Wenn Sie einen Status/eine Route eingeben, müssen Sie einen Servertyp abonnieren und sich bei $destroy Abmelden, um ein Leck zu vermeiden.

6
svarog

Sie sind Websockets: Sie sind eine Erweiterung von HTTP und arbeiten im selben Port.

Es ermöglicht die bidirektionale Kommunikation zwischen Client und Server und natürlich steht dafür eine eckige Integration zur Verfügung.

Ansonsten gibt es auf der Backoffice-Seite, wenn Sie sich Spring in Java ansehen, andere Möglichkeiten:

  • Lange Umfrage
  • STAMPFEN
  • ...

Dieser Link covevr Websocket und andere Methoden, die an Ihre Bedürfnisse angepasst sind.

Wenn Sie Spring/Java nicht haben, sollten Sie es trotzdem lesen und nach einer entsprechenden Lösung in Ihrem Technologie-Stack suchen.

3
Walfrat

Sie müssen Dinge wie "ziemlich anstrengend" besser definieren und herausfinden, warum das neueste Ergebnis nicht sofort abgerufen wird. Dies sind Fragen, die wahrscheinlich auftreten, unabhängig davon, ob Sie von Ihrem Kunden abfragen oder nicht.

Mit einem browserbasierten Front-End haben Sie jedoch grundsätzlich zwei Möglichkeiten, wenn Sie in nativem Javascript bleiben möchten: Polling (wie Sie es tun oder möglicherweise lange Polling) oder Web-Sockets. Ich habe noch nie zuvor Web-Sockets mit ASMX gesehen (ohne zu sagen, dass dies nicht möglich ist, nur dass ich dort keine Erfahrung habe und daher nicht weiß, wie schwierig es für Sie wäre, sie erneut zu implementieren). Wenn Sie, wie gesagt, Leistungs- oder Genauigkeitsprobleme haben, sind diese möglicherweise auch bei Verwendung von Web-Sockets noch vorhanden.

1
Paul