Πριν ξεκινήσω το κείμενο, πρέπει να ευχαριστήσω τον χρήστη του Διαδικτύου "Xiaolong" και τους χρήστες του Διαδικτύου στην ομάδα emqtt.io για τη βοήθειά τους, μόλις άρχισα να χρησιμοποιώ το MQTT Υπάρχουν πολλά πράγματα που δεν καταλαβαίνω, όταν ρώτησα για τη λύση στην ομάδα emqtt.io, ο "Xiaolong" μου έδωσε μια λεπτομερή εξήγηση για ορισμένα σημεία γνώσης του MQTT και έδωσε λύσεις, ευχαριστώ πολύ. Νομίζω ότι μερικά από τα πράγματα που αναφέρονται σε αυτό εξακολουθούν να είναι πολύ χρήσιμα για αρχάριους, οπότε εδώ είναι μια περίληψη του ιστορικού συνομιλιών μου με το "Xiaolong" για αναφορά.
Ερώτηση 1: Εάν το MCU έχει περιορισμένη κρυφή μνήμη και περιορισμένη επεξεργαστική ισχύ, είναι αδύνατη η αποστολή μηνυμάτων ταυτόχρονα, πώς να δημοσιεύσετε μηνύματα μέσω του MQTT σε αυτήν την περίπτωση; Αρχικά, συναρμολογήστε την κεφαλίδα του πρωτοκόλλου δημοσίευσης, γράψτε το μήκος του ωφέλιμου φορτίου σε αυτήν, στείλτε το μέσω TCP και, στη συνέχεια, στείλτε το ωφέλιμο φορτίο σιγά σιγά. Εάν δεν μπορείτε να λάβετε το συνολικό μήκος ωφέλιμου φορτίου, αυτό είναι δύσκολο. Επειδή στέλνετε μια αναφορά πρωτοκόλλου δημοσίευσης, αφού ο διακομιστής διαβάσει το μήκος του ωφέλιμου φορτίου στην κεφαλή, θα συνεχίσει να διαβάζει μέχρι να φτάσει στο απαιτούμενο μήκος και, στη συνέχεια, η δημοσίευση μετράται. Επομένως, η ανάγκη σας είναι πρώτα να επιβεβαιώσετε το μήκος του περιεχομένου που δημοσιεύετε, στη συνέχεια να ομαδοποιήσετε την κεφαλίδα του πακέτου δημοσίευσης, να συμπληρώσετε το μήκος ωφέλιμου φορτίου, tcp:send(head) και, στη συνέχεια, να στείλετε το ωφέλιμο φορτίο ένα προς ένα, όπως 1k κάθε φορά, ή να στείλετε τα δεδομένα σύμφωνα με το κανονικό tcp και να τα στείλετε σε όλη τη διαδρομή, ακόμα κι αν η δημοσίευση έχει τελειώσει. Η επόμενη αποστολή ανήκει στο επίπεδο TCP και δεν χρειάζεται να παρέμβετε. Εάν στο επίπεδο TCP, η αποστολή αποτύχει, πρέπει να υπάρχει πρόβλημα με την υποδοχή, η σύνδεση έχει διακοπεί, πρέπει να συνδεθείτε ξανά στον διακομιστή MQTT, εάν δεν έχει ολοκληρωθεί, τότε η περίοδος λειτουργίας διακομιστή θα τερματιστεί επίσης, δηλαδή ο διακομιστής δεν έχει λάβει τα δεδομένα. Επανασυνδεθείτε, πρέπει να στείλετε ξανά το μήνυμα, εφόσον είναι αποσυνδεδεμένο, πρέπει να επανασυνδεθείτε, αν θέλετε να στείλετε ξανά τα δεδομένα, εξαρτάται από το αν έχετε αποθηκεύσει τα προηγούμενα δεδομένα. Επίσης, εάν το μήνυμα είναι σημαντικό, μπορείτε να χρησιμοποιήσετε qos=1 ή 2 για να διασφαλίσετε ότι ο διακομιστής λαμβάνει το μήνυμα, το qos=1 απαιτεί ένα ταξίδι μετ' επιστροφής, το qos=2 χρειάζεται τέσσερα ταξίδια μετ' επιστροφής, το qos=0 είναι πολύ απλό, αρκεί να το στείλετε, δεν πειράζει.
Ερώτηση 2: Υπάρχουν πολλοί πόροι ανοιχτού κώδικα για το MQTT;
Η σύνδεση με υπερσύνδεσμο είναι ορατή.Υπάρχουν πολλά από αυτά
Ερώτηση 3: Γιατί το MQTT γενικά δεν παρέχει λειτουργίες επιμονής;
Το πρωτόκολλο MQTT έχει σχεδιαστεί σύμφωνα με τον διαδικτυακό σχεδιασμό της συσκευής και τα δεδομένα αποθηκεύονται στη μνήμη
Ερώτηση 4: Καταναλώνει μνήμη MQTT;
Το MQTT καταναλώνει περισσότερο μνήμη και τα δεδομένα μέτρησης του emqtt είναι: 38W, η μνήμη αντιστοιχεί σε 14G, η CPU 15%
Ερώτηση 5: Ποια είναι η σχέση μεταξύ συνεδρίας και πελάτη;
Για παράδειγμα, εάν έχετε μια πλακέτα, ως πελάτης, ξεκινήστε ένα αίτημα σύνδεσης MQTT για να συνδεθείτε στον διακομιστή MQTT, για παράδειγμα, είναι μια υπηρεσία EMQTT, αφού ο διακομιστής EMQTT λάβει το αίτημα σύνδεσης αυτής της πλακέτας, θα δημιουργήσει μια σύνδεση TCP με την πλακέτα στο επίπεδο TCP και εντός του EMQTT, θα δημιουργηθεί μια διαδικασία για την επικοινωνία με αυτήν την πλακέτα και θα δημιουργηθεί επίσης μια διαδικασία, που ονομάζεται συνεδρία. Αυτό το sessoin είναι ένα θέμα που ειδικεύεται στη διαχείριση της συνδρομής αυτού του πίνακα και άλλοι πίνακες θα το στείλουν επίσης στη συνεδρία που αντιστοιχεί σε αυτόν τον πίνακα εάν δημοσιεύσουν το θέμα που ενδιαφέρει αυτόν τον πίνακα, εάν αυτή η συνεδρία λάβει το εγγεγραμμένο θέμα και διαπιστώσει ότι ο πελάτης είναι ακόμα ζωντανός, θα στείλει τα δεδομένα μέσω αυτού του πελάτη μέσω TCP σε αυτόν τον πίνακα, εάν διαπιστωθεί ότι ο πελάτης δεν είναι πλέον εκεί, δηλαδή ο πίνακας και ο διακομιστής είναι σπασμένοι. Στη συνέχεια, η συνεδρία θα αποθηκεύσει πρώτα το ληφθέν θέμα συνδρομής στη συνεδρία και την επόμενη φορά που θα συνδεθεί η πλακέτα και cleansession=false, τότε η συνεδρία δεν θα διαγραφεί και κατά τη σύνδεση αυτή τη φορά, το μήνυμα συνδρομής που λάβατε προηγουμένως θα σταλεί στον πίνακα, κάτι που πιθανώς σημαίνει.
Ερώτηση 6: Πώς γνωρίζει το emqtt ότι ο συνδεδεμένος πελάτης είναι ο ίδιος;
Κατά τη σύνδεση, πρέπει να ορίσετε ένα αναγνωριστικό πελάτη, αυτό το αναγνωριστικό μπορεί να μην οριστεί, εάν δεν οριστεί, θα δημιουργηθεί αυτόματα ένα μοναδικό αναγνωριστικό από την πλευρά του διακομιστή emqtt, εάν θέλετε να χρησιμοποιήσετε τη συνεδρία, πρέπει να έχετε ένα μοναδικό αναγνωριστικό, μπορείτε να χρησιμοποιήσετε το IMEI. Εάν πρέπει να λαμβάνετε μηνύματα εκτός σύνδεσης, πρέπει να χρησιμοποιήσετε ένα συγκεκριμένο αναγνωριστικό.
Ερώτηση 7: Μπορεί να τροποποιηθεί ο χρόνος συνεδρίας του emqtt;
Μπορείτε να αλλάξετε την ώρα της συνεδρίας, τώρα είναι 48 ώρες, μπορείτε να την αλλάξετε σε μια εβδομάδα, αν θέλετε να είναι μόνιμη, φοβάμαι ότι το emqtt δεν είναι κατάλληλο.
Ερώτηση 8: Είναι γραμμένο το δικαίωμα πρόσβασης του emqtt στο αρχείο διαμόρφωσης;
κ.λπ./acl.config
Ερώτηση 9: Ποια είναι η κατανομή του emqtt;
Κατανεμημένο σημαίνει απλώς τη σύνδεση πολλών από τους διακομιστές σας μεταξύ τους, οποιονδήποτε ή περισσότερους από αυτούς, εφόσον δεν είναι όλοι χαλασμένοι, το emqtt μπορεί να λειτουργήσει κανονικά. Τα δεδομένα EMQTT μοιράζονται από πολλούς κόμβους και εάν υπάρχει πρόβλημα με έναν κόμβο, τα δεδομένα δεν θα χαθούν, αλλά τα δεδομένα συνεδρίας στον κόμβο θα χαθούν.
|