2017-04-30 19 views
1

Ich habe eine Web-Anwendung mit AngularJS (Front-End) und PHP/MySQL (Back-End) gebaut.AngularJS und MySQL Real-Time-Kommunikation

Ich frage mich, ob es eine Möglichkeit gibt, die MySQL-Datenbank (ohne Node.js) zu "beobachten". Wenn also ein Benutzer Daten hinzufügt, werden die Änderungen auch mit anderen Benutzern synchronisiert.

z. Ich weiß, dass Firebase das tut, aber es ist eine objektorientierte Datenbank und ich kann die erweiterten Abfragen dort nicht wie mit SQL ausführen.

Ich dachte, $interval und $http zu verwenden und AJAX-Anforderungen zu tun, so dass ich Änderungen in der Datenbank erkennen konnte. Nun, das ist möglich, aber es wird Tausende von http Anfragen an den Server jeden Tag und plus PHP bei jeder Anfrage interpretieren.

Ich glaube nichts ist unmöglich, ich brauche nur eine Idee, dies zu tun, die ich nicht habe, deshalb frage ich hier um Hilfe.

+0

Wie wäre es mit Ajax Long Polling? Es ist nicht wirklich "Echtzeit", aber es ahmt es richtig nach? Zumindest kam mir das in den Kopf. Vielleicht ist es nicht für Ihre Anwendung geeignet, aber ich weiß es nicht. – Dennis1679

Antwort

0

Wenn Sie eine Form von "Echtzeitkommunikation" möchten, müssen Sie wahrscheinlich eine Form von Long-Polling vom Client integrieren. Es sei denn, Sie verwenden Web-Sockets, aber das ist ein großer Beitrag über eine Reihe von verschiedenen Dingen. Sie sind jedoch richtig besorgt über die Bandbreite und die Nachfrage in der DB. Also hier ist mein Vorschlag:

Wenn Sie keine Erfahrung mit Web-Sockets haben, dann protokollieren Sie Ihre Ereignisse in einer separaten Tabelle/View und verwenden Sie die Pub/Sub-Methode, um Entitäten zu einem Ereignis zu subskribieren und dieses Ereignis an die Tabelle zu senden . Dann lange gegen die Watcher-Ansicht abstimmen, um zu sehen, wann sich Änderungen ergeben haben. Wenn einer aufgetreten ist, dann fragen Sie nach dem genauen Wert.

Eine andere Option wäre die Verwendung eines Abfragesystems mit "Entscheidern", die Nachrichten enthalten. Werfen Sie einen Blick auf Amazon SQS-Plattform für eine bessere Erklärung, wie dies funktionieren könnte. Im Grunde haben Sie eine Warteschlange, die Nachrichten enthält und ein Entscheider wählt, wo die Nachricht gespeichert wird, indem Sie eine Hash- oder Sortiermethode verwenden (um die Laufzeit zu reduzieren). Wenn der Client eine Aktualisierung anfordert, findet der Entscheider alle Nachrichten, die basierend auf dem Hash/Sort angewendet werden, und gibt sie zurück. Dann müssen Sie entscheiden, wie und wann die Nachrichten vernichtet werden sollen.

Die zweite Option würde jedoch viel mehr Basteln erfordern, also geht es wirklich um Ihre Präferenz. Ich denke, was Sie finden werden, ist die Schwierigkeit, dass die meisten Lösungen mit der Tatsache zu tun haben, dass die Nachricht 1 oder mehrmals geliefert werden muss und Sie verfolgen müssen, wenn jemand die Nachricht erhalten hat und wenn es jetzt sein kann gelöscht aus der Warteschlange/Ereignistabelle oder wenn Sie noch warten müssen. Andernfalls verbrauchen Sie viel Speicher.