In meinem College-Projekt (Smart Home System) gibt es eine Funktion, bei der ein Bild auf einem Monitor (in einem Browser) angezeigt werden muss, wenn jemand an die Tür klopft. Ich implementiere den Türklopfsensor (Piezo) mit einem Arduino, der irgendwie Befehle an den Raspberry Pi senden muss, um ein Foto aufzunehmen, das an den Browser eines anderen Computers gesendet werden soll. Es gibt mehrere andere Module wie dieses. Alles ist mit demselben WiFi-Netzwerk verbunden.
Jetzt kann ich es hoffentlich irgendwie zum Laufen bringen, indem ich PHP und MySQL und mehrere Ajax-Anfragen verwende, die ständig ausgeführt werden, aber das ist wahrscheinlich keine sehr gute Möglichkeit, dies zu tun. Ich habe von node.js und Web-Sockets gehört, bin mir aber nicht sicher, ob ich Zeit habe, es zu lernen. (Ich kann, wenn es absolut notwendig ist)
Wie auch immer, kann mir jemand sagen, welcher Weg der richtige ist, um diese Art von System zu implementieren? Es wäre wirklich hilfreich.
quelle
Antworten:
Push vs Poll
Ihre vorgeschlagene Lösung zum Senden häufiger AJAX-Anfragen klingt nach Abfragen. Sie senden von Zeit zu Zeit eine Anfrage, um zu überprüfen, ob sich der Status geändert hat. Es wäre weitaus sinnvoller , Änderungen auf den Server zu übertragen, wenn der Piezosensor eine Änderung erkennt.
Es ist der Unterschied zwischen diesen:
Und das:
Das erste Beispiel ist das Abrufen und das zweite das Drücken. Sie können feststellen, welches Gerät einen geringeren Stromverbrauch, weniger komplexen Code und eine geringere Netzwerknutzung aufweist.
HTTP oder etwas anderes?
Eine AJAX-Anfrage wird über HTTP gesendet, ist also ziemlich schwergewichtig und erfordert mehrere TCP-Handshakes pro Verbindung (es sei denn, Sie verwenden Keep-Alive ).
Es kann sich lohnen, alternative Protokolle wie MQTT in Betracht zu ziehen (die Frage „ Wann und warum sollte das MQTT-Protokoll verwendet werden? “, Die ein sehr ähnliches Problem wie Ihr Protokoll aufweist , enthält einige gute Erklärungen ).
Ein Nachrichtenbroker wie MQTT ist möglicherweise etwas leistungsfähiger als Sie in Ihrer aktuellen Situation wirklich benötigen. Ein MQTT-Broker kann jedoch problemlos erweitert werden, wenn Sie Ihrem Smart-Home-Netzwerk weitere Geräte hinzufügen, während dies bei Ihrem aktuellen System von AJAX-Anforderungen der Fall ist schnell auseinander fallen. Stellen Sie sich vier oder fünf verschiedene Geräte vor, die sich gegenseitig abfragen. Dies würde schnell zu einer Überlastung Ihres Netzwerks führen und den Stromverbrauch massiv belasten.
Knoten- und Web-Sockets
Die Verwendung von Web-Sockets und Node würde das Problem der Verwendung von Push anstelle von Umfragen lösen. Daher wäre dies meiner Meinung nach eine gute Idee. Ich vermute jedoch , dass Umfragen funktionieren würden, wenn Sie Node wirklich nicht lernen wollten.
Wenn Sie eine erweiterbare Lösung suchen , die funktioniert, wenn Sie Ihr Smart Home erweitern, sollten Sie unbedingt pushen - das erspart Ihnen viel Ärger und Tränen. Wenn Sie nur einen schnellen Proof of Concept wünschen, funktioniert das Polling wahrscheinlich.
Mein persönlicher Rat ist, dass Sie entweder Web-Sockets lernen oder mit einem Nachrichtenbroker wie MQTT nachforschen sollten . Sie können eine Client-Bibliothek wie Mosquitto-PHP (mit einer Anleitung von HiveMQ ) verwenden, um die Verwendung von MQTT in PHP zu vereinfachen, oder einfach Knoten- und Web-Sockets verwenden. Ich vermute, dass die Lernressourcen für Node- und Web-Sockets besser sind, aber MQTT wird eher für Smart Home / IoT-Umgebungen bevorzugt.
quelle