Χρησιμοποιεί το WebRTC HTTP?
Χρησιμοποιεί το WebRTC HTTP
Το άνοιγμα μιας νέας σύνδεσης TCP για κάθε αίτημα έγινε πρόβλημα καθώς εξελίχθηκε ο ιστός. Ξεκινήσαμε να χτίζουμε πλήρεις εφαρμογές αντί για απλές ιστοσελίδες και ο αριθμός των μέσων και των αρχείων που απαιτείται ένα πρόγραμμα περιήγησης για την ανάκτηση έγινε περισσότερο έγινε περισσότερο. Φανταστείτε μια τυπική εφαρμογή ιστού που απαιτεί αρχείο HTML, CSS και JavaScript, καθώς και διάφορες εικόνες και άλλα περιουσιακά στοιχεία. Για κάθε αρχείο έπρεπε να γίνει μια νέα σύνδεση.
Webrtc vs http streaming
В э д д д д д д œ е е е е е е е и и и и и и и и и и и и и и и и и и.
-Συζητήστε-WEBRTC
Έχω πειραματιστεί με πρωτόκολλα ροής WebRTC και HTTP (HLS, MPEG-Dash) για ζωντανή ροή βίντεο για λίγες μέρες τώρα και διαπίστωσε ότι ενώ το WebRTC επιτυγχάνει δευτερεύουσες καθυστερήσεις, τα πρωτόκολλα ροής HTTP έχουν πάντα πολυεπίπεδη καθυστέρηση. Έχω λοιπόν μερικές ερωτήσεις σχετικά με τη ροή WebRTC VS HTTP.
1. Πώς είναι το WebRTC σε θέση να επιτύχει δευτερεύουσες καθυστερήσεις σε σύγκριση με τα πρωτόκολλα ροής HTTP?
Το WebRTC είναι σε θέση να επιτύχει δευτερεύουσες καθυστερήσεις σε σύγκριση με τα πρωτόκολλα ροής HTTP λόγω των δυνατοτήτων επικοινωνίας σε πραγματικό χρόνο (RTC). Το WebRTC είναι κατασκευασμένο για την παροχή εφαρμογών με άμεση μετάδοση βίντεο, ήχου και άλλων δεδομένων μεταξύ των συνομηλίκων. Αυτό επιτρέπει μια ουσιαστικά στιγμιαία μετάδοση περιεχομένου, με αποτέλεσμα τη δεύτερη καθυστέρηση των δευτερευόντων καθυστερήσεων.
2. Εάν το WebRTC παρέχει ήδη ροή βίντεο χαμηλής καθυστέρησης, γιατί υπάρχει προσπάθεια ενοποίησης πρωτοκόλλων ροής HTTP στο πλαίσιο του προτύπου MPEG-DASH?
Η προσπάθεια ενοποίησης πρωτοκόλλων ροής HTTP στο πλαίσιο του προτύπου MPEG-DASH οδηγείται από την ανάγκη για τυποποιημένη προσέγγιση για τη ροή με βάση το HTTP. Ενώ η WEBRTC παρέχει ροή βίντεο χαμηλής καθυστέρησης, δεν είναι κατάλληλο για όλες τις περιπτώσεις χρήσης και ενδέχεται να μην είναι συμβατή με όλες τις συσκευές και το λογισμικό. Με την ενοποίηση των πρωτοκόλλων ροής HTTP σύμφωνα με το πρότυπο MPEG-Dash, γίνεται ευκολότερο για τους παρόχους περιεχομένου να παρέχουν ροή βίντεο υψηλής ποιότητας σε διαφορετικές πλατφόρμες και συσκευές, εξασφαλίζοντας μια συνεπή εμπειρία προβολής για τους χρήστες.
3. Πώς συγκρίνεται το WebRTC με το RTMP? (Δεν έχω εξερευνήσει το RTMP μέχρι τώρα, αλλά θέλω να μάθω αν είναι δυνατόν να επιτευχθούν καθυστερήσεις υπο-δεύτερης με RTMP)
Το WebRTC και το RTMP είναι και τα δύο πρωτόκολλα που χρησιμοποιούνται για τη ροή μέσων, αλλά έχουν κάποιες διαφορές όσον αφορά την καθυστέρηση και τη συμβατότητα. Το WebRTC έχει σχεδιαστεί για επικοινωνία σε πραγματικό χρόνο και μπορεί να επιτύχει καθυστερήσεις υπο-δεύτερου, καθιστώντας την κατάλληλη για εφαρμογές που απαιτούν άμεση μετάδοση. Από την άλλη πλευρά, το RTMP (πρωτόκολλο μηνυμάτων σε πραγματικό χρόνο) είναι ένα πρωτόκολλο που χρησιμοποιείται κυρίως για τη ροή ήχου, βίντεο και δεδομένων μεταξύ κωδικοποιητή και διακομιστή συνεχούς ροής. Ενώ το RTMP μπορεί να παρέχει ροή χαμηλής καθυστέρησης, η επίτευξη καθυστερήσεων υπο-δευτερολέπτων μπορεί να εξαρτάται από διάφορους παράγοντες όπως οι συνθήκες δικτύου και οι διαμορφώσεις διακομιστή.
Μια συγκριτική μελέτη μεταξύ της ροής βασισμένο σε WebRTC και HTTP
Για μεγάλο χρονικό διάστημα, η μείωση της καθυστέρησης ροής ήταν ένα δημοφιλές θέμα. Οι καθυστερήσεις δεκάδων δευτερολέπτων, ακόμη και ένα λεπτό, είναι γνωστό ότι εμφανίζονται με ροή με βάση το HTTP στο παρελθόν. Με παραδοσιακή καθυστέρηση εκπομπής στα μονοψήφια δευτερόλεπτα και αναδυόμενες λύσεις όπως Υπηρεσίες ανάπτυξης WebRTC, Το ερώτημα είναι ποια προσέγγιση πρέπει να ακολουθήσετε. Η ροή WebRTC είναι σε θέση να παραδώσει βίντεο όχι μόνο σε υπο-δευτερόλεπτα, αλλά σε λιγότερο από 500 χιλιοστά του δευτερολέπτου. Είναι σήμερα η διαθέσιμη τεχνολογία ροής χαμηλότερης καθυστέρησης, επιτρέποντας μια σχεδόν στιγμιαία μετάδοση.
Σε αυτόν τον εύθραυστο οδηγό, θα εξετάσουμε πώς λειτουργεί το WebRTC και θα το συγκρίνουμε με το HTTP από την άποψη ενός Υπηρεσία ροής βίντεο. Ας αρχίσουμε!
Μια γρήγορη κατάρρευση της ροής και του WebRTC με βάση το HTTP
Τα πρωτόκολλα που βασίζονται σε HTTP είναι τεχνικά κανονικά διακομιστές ιστού που στέλνουν προοδευτικές λήψεις. Χρησιμοποιούν προσαρμοστική ροή bitrate για να παρέχουν την υψηλότερη δυνατή εμπειρία βίντεο και προβολή, ανεξάρτητα από τη σύνδεση, το λογισμικό ή τη συσκευή. Μερικά από τα πιο κοινά διαθέσιμα πρωτόκολλα που βασίζονται σε HTTP περιλαμβάνουν MPEG-Dash, Apple’S HLS, Adobe HDS και Microsoft Smooth Streaming.
Το WebRTC είναι ένα ισχυρό πρωτόκολλο που υποστηρίζεται από εξαιρετικά εργαλεία και ευρεία υποστήριξη της βιομηχανίας. Δημιουργήθηκε για την παροχή εφαρμογών με δυνατότητες επικοινωνίας σε πραγματικό χρόνο (RTC), επιτρέποντας το βίντεο, τον ήχο ή οποιοδήποτε άλλο τύπο δεδομένων που θα μεταφερθούν μεταξύ των συνομηλίκων. Πρόκειται για μια βασική διάκριση μεταξύ των δύο σε σύγκριση με τη ροή με βάση το HTTP, η οποία είναι προσανατολισμένη στον πελάτη-διακομιστή.
UDP vs. TCP
Τα βασικά στοιχεία του πρωτοκόλλου Internet Protocol, το πρωτόκολλο Datagram User (UDP) και το πρωτόκολλο ελέγχου μετάδοσης (TCP), και οι δύο κατοικούν στο στρώμα μεταφοράς.
Η κύρια διάκριση μεταξύ UDP και TCP είναι ότι το TCP απαιτεί χειραψία τριών δρόμων κατά τη μετάδοση δεδομένων. Ο εκκινητής (πελάτης) ζητά από τον δέκτη (διακομιστή) να δημιουργήσει μια σύνδεση, τον δέκτη απαντά και ο εκκινητής αναγνωρίζει την απάντηση και διατηρεί μια συνεδρία μεταξύ των δύο άκρων. Ως εκ τούτου, το TCP είναι εξαιρετικά αξιόπιστο και μπορεί να αντιμετωπίσει την απώλεια πακέτων και την παραγγελία.
Το UDP, από την άλλη πλευρά, δεν’να απαιτείται μια χειραψία για να ξεκινήσει. Μεταφέρει δεδομένα ανεξάρτητα από τους περιορισμούς του εύρους ζώνης, γεγονός που το καθιστά ταχύτερο και πιο επικίνδυνο. Επειδή το UDP δεν υποστηρίζει αναμεταδόσεις, παραγγελία πακέτων ή έλεγχο σφαλμάτων, ένας λόξυγκας δικτύου έχει τη δυνατότητα να μολύνει τα δεδομένα σε διαμετακόμιση.
Τα πρωτόκολλα όπως το WebRTC χρησιμοποιούν συχνά το UDP, ενώ τα πρωτόκολλα που βασίζονται σε HTTP χρησιμοποιούν TCP.
Πώς το WebRTC στοιβάζει έναντι ροής με βάση το HTTP?
- Τι είδους λανθάνουσα κατάσταση ψάχνετε?
- Ποιο θα είναι το μέγεθος του ακροατηρίου?
- Ποιο είναι το μέγιστο ποσό που είστε πρόθυμοι να δαπανήσετε?
Αφάνεια
Οι απαντήσεις στις ερωτήσεις καθυστέρησης εξαρτώνται από το εύρος λανθάνουσας κατάστασης που στοχεύετε.
Το νέο και ενισχυμένο HLS όπως το LL-HLS και το LL-Dash διαθέτουν 3 δευτερόλεπτα ή λιγότερο λανθάνουσα κατάσταση. Αυτό εξακολουθεί να θεωρείται γρήγορο και αρκεί για την πλειονότητα των περιπτώσεων χρήσης χαμηλής καθυστέρησης. Το WebRTC, από την άλλη πλευρά, παραμένει η ταχύτερη λύση εάν η περίπτωση χρήσης σας απαιτεί ροή σε πραγματικό χρόνο. Δεδομένου ότι πρόκειται για πρωτόκολλο UDP που αναπτύχθηκε για να προσαρμοστεί πλήρως στο σύγχρονο Διαδίκτυο. Υποστηρίζει 500ms καθυστέρησης σε πραγματικό χρόνο.
Το WebRTC σχεδιάστηκε για να παρέχει αμφίδρομη επικοινωνία σε πραγματικό χρόνο. Σε αντίθεση με το HLS, το οποίο βασίζεται στο TCP, το WebRTC βασίζεται στο UDP. Αυτό σημαίνει ότι το WebRTC μπορεί να ξεκινήσει χωρίς τον πελάτη και τον διακομιστή να ανταλλάσσει πληροφορίες χειραψίας. Ως αποτέλεσμα, το WebRTC είναι ταχύτερο, αλλά το καθιστά επίσης πιο ευαίσθητο στις διακυμάνσεις του δικτύου.
Το WebRTC είναι το πρωτόκολλο για να χρησιμοποιήσετε εάν η λύση σας απαιτεί ροή από ομοτίμους, σε πραγματικό χρόνο. Ωστόσο, εάν χρειαστεί να αναπτύξετε το κοινό σας πάνω από 50 άτομα, θα πρέπει να επανεξετάσετε τη στρατηγική σας.
Σε σύγκριση με το HLS, η κλιμάκωση του WebRTC είναι ουσιαστικά πιο δύσκολη. Ωστόσο, αυτό μπορεί να λυθεί με μια υβριδική ροή εργασίας. Η επιλογή σας θα καθοριστεί από την περίπτωση χρήσης σας και το μέγεθος του κοινού -στόχου.
Όταν πρόκειται για την επίτευξη τεράστιων ακροατηρίων, τα πρωτόκολλα που βασίζονται σε HTTP βγαίνουν στην κορυφή.
Χρησιμοποιεί το WebRTC HTTP
Το άνοιγμα μιας νέας σύνδεσης TCP για κάθε αίτημα έγινε πρόβλημα καθώς εξελίχθηκε ο ιστός. Ξεκινήσαμε να χτίζουμε πλήρεις εφαρμογές αντί για απλές ιστοσελίδες και ο αριθμός των μέσων και των αρχείων που απαιτείται ένα πρόγραμμα περιήγησης για την ανάκτηση έγινε περισσότερο έγινε περισσότερο. Φανταστείτε μια τυπική εφαρμογή ιστού που απαιτεί αρχείο HTML, CSS και JavaScript, καθώς και διάφορες εικόνες και άλλα περιουσιακά στοιχεία. Για κάθε αρχείο έπρεπε να γίνει μια νέα σύνδεση.
Webrtc vs http streaming
В э д д д д д д œ е е е е е е е и и и и и и и и и и и и и и и и и и.
-Συζητήστε-WEBRTC
Έχω πειραματιστεί με πρωτόκολλα ροής WebRTC και HTTP (HLS, MPEG-Dash) για ζωντανή ροή βίντεο για λίγες μέρες τώρα και διαπίστωσε ότι ενώ το WebRTC επιτυγχάνει δευτερεύουσες καθυστερήσεις, τα πρωτόκολλα ροής HTTP έχουν πάντα πολυεπίπεδη καθυστέρηση. Έχω λοιπόν μερικές ερωτήσεις σχετικά με τη ροή WebRTC VS HTTP.
1. Πώς είναι το WebRTC σε θέση να επιτύχει δευτερεύουσες καθυστερήσεις σε σύγκριση με τα πρωτόκολλα ροής HTTP?
2. Εάν το WebRTC παρέχει ήδη ροή βίντεο χαμηλής καθυστέρησης, γιατί υπάρχει προσπάθεια ενοποίησης πρωτοκόλλων ροής HTTP στο πλαίσιο του προτύπου MPEG-DASH?
3. Πώς συγκρίνεται το WebRTC με το RTMP? (Δεν έχω εξερευνήσει το RTMP μέχρι τώρα, αλλά θέλω να μάθω αν είναι δυνατόν να επιτευχθούν καθυστερήσεις υπο-δεύτερης με RTMP)
Μια συγκριτική μελέτη μεταξύ της ροής βασισμένο σε WebRTC και HTTP
Για μεγάλο χρονικό διάστημα, η μείωση της καθυστέρησης ροής ήταν ένα δημοφιλές θέμα. Οι καθυστερήσεις δεκάδων δευτερολέπτων, ακόμη και ένα λεπτό, είναι γνωστό ότι εμφανίζονται με ροή με βάση το HTTP στο παρελθόν. Με παραδοσιακή καθυστέρηση εκπομπής στα μονοψήφια δευτερόλεπτα και αναδυόμενες λύσεις όπως Υπηρεσίες ανάπτυξης WebRTC , Το ερώτημα είναι ποια προσέγγιση πρέπει να ακολουθήσετε. Η ροή WebRTC είναι σε θέση να παραδώσει βίντεο όχι μόνο σε υπο-δευτερόλεπτα, αλλά σε λιγότερο από 500 χιλιοστά του δευτερολέπτου. Είναι σήμερα η διαθέσιμη τεχνολογία ροής χαμηλότερης καθυστέρησης, επιτρέποντας μια σχεδόν στιγμιαία μετάδοση.
Σε αυτόν τον εύθραυστο οδηγό, θα εξετάσουμε πώς λειτουργεί το WebRTC και θα το συγκρίνουμε με το HTTP από την άποψη ενός Υπηρεσία ροής βίντεο . Ας αρχίσουμε!
Μια γρήγορη κατάρρευση της ροής και του WebRTC με βάση το HTTP
Τα πρωτόκολλα που βασίζονται σε HTTP είναι τεχνικά κανονικά διακομιστές ιστού που στέλνουν προοδευτικές λήψεις. Χρησιμοποιούν προσαρμοστική ροή bitrate για να παρέχουν την υψηλότερη δυνατή εμπειρία βίντεο και προβολή, ανεξάρτητα από τη σύνδεση, το λογισμικό ή τη συσκευή. Μερικά από τα πιο κοινά διαθέσιμα πρωτόκολλα που βασίζονται σε HTTP περιλαμβάνουν MPEG-Dash, Apple’S HLS, Adobe HDS και Microsoft Smooth Streaming.
Το WebRTC είναι ένα ισχυρό πρωτόκολλο που υποστηρίζεται από εξαιρετικά εργαλεία και ευρεία υποστήριξη της βιομηχανίας. Δημιουργήθηκε για την παροχή εφαρμογών με δυνατότητες επικοινωνίας σε πραγματικό χρόνο (RTC), επιτρέποντας το βίντεο, τον ήχο ή οποιοδήποτε άλλο τύπο δεδομένων που θα μεταφερθούν μεταξύ των συνομηλίκων. Πρόκειται για μια βασική διάκριση μεταξύ των δύο σε σύγκριση με τη ροή με βάση το HTTP, η οποία είναι προσανατολισμένη στον πελάτη-διακομιστή.
UDP vs. TCP
Τα βασικά στοιχεία του πρωτοκόλλου Internet Protocol, το πρωτόκολλο Datagram User (UDP) και το πρωτόκολλο ελέγχου μετάδοσης (TCP), και οι δύο κατοικούν στο στρώμα μεταφοράς.
Η κύρια διάκριση μεταξύ UDP και TCP είναι ότι το TCP απαιτεί χειραψία τριών δρόμων κατά τη μετάδοση δεδομένων. Ο εκκινητής (πελάτης) ζητά από τον δέκτη (διακομιστή) να δημιουργήσει μια σύνδεση, τον δέκτη απαντά και ο εκκινητής αναγνωρίζει την απάντηση και διατηρεί μια συνεδρία μεταξύ των δύο άκρων. Ως εκ τούτου, το TCP είναι εξαιρετικά αξιόπιστο και μπορεί να αντιμετωπίσει την απώλεια πακέτων και την παραγγελία.
Το UDP, από την άλλη πλευρά, δεν’να απαιτείται μια χειραψία για να ξεκινήσει. Μεταφέρει δεδομένα ανεξάρτητα από τους περιορισμούς του εύρους ζώνης, γεγονός που το καθιστά ταχύτερο και πιο επικίνδυνο. Επειδή το UDP δεν υποστηρίζει αναμεταδόσεις, παραγγελία πακέτων ή έλεγχο σφαλμάτων, ένας λόξυγκας δικτύου έχει τη δυνατότητα να μολύνει τα δεδομένα σε διαμετακόμιση.
Τα πρωτόκολλα όπως το WebRTC χρησιμοποιούν συχνά το UDP, ενώ τα πρωτόκολλα που βασίζονται σε HTTP χρησιμοποιούν TCP.
Πώς το WebRTC στοιβάζει έναντι ροής με βάση το HTTP?
- Τι είδους λανθάνουσα κατάσταση ψάχνετε?
- Ποιο θα είναι το μέγεθος του ακροατηρίου?
- Ποιο είναι το μέγιστο ποσό που είστε πρόθυμοι να δαπανήσετε?
Αφάνεια
Οι απαντήσεις στις ερωτήσεις καθυστέρησης εξαρτώνται από το εύρος λανθάνουσας κατάστασης που στοχεύετε.
Το νέο και ενισχυμένο HLS όπως το LL-HLS και το LL-Dash διαθέτουν 3 δευτερόλεπτα ή λιγότερο λανθάνουσα κατάσταση. Αυτό εξακολουθεί να θεωρείται γρήγορο και αρκεί για την πλειονότητα των περιπτώσεων χρήσης χαμηλής καθυστέρησης. Το WebRTC, από την άλλη πλευρά, παραμένει η ταχύτερη λύση εάν η περίπτωση χρήσης σας απαιτεί ροή σε πραγματικό χρόνο. Δεδομένου ότι πρόκειται για πρωτόκολλο UDP που αναπτύχθηκε για να προσαρμοστεί πλήρως στο σύγχρονο Διαδίκτυο. Υποστηρίζει 500ms καθυστέρησης σε πραγματικό χρόνο.
Το WebRTC σχεδιάστηκε για να παρέχει αμφίδρομη επικοινωνία σε πραγματικό χρόνο. Σε αντίθεση με το HLS, το οποίο βασίζεται στο TCP, το WebRTC βασίζεται στο UDP. Αυτό σημαίνει ότι το WebRTC μπορεί να ξεκινήσει χωρίς τον πελάτη και τον διακομιστή να ανταλλάσσει πληροφορίες χειραψίας. Ως αποτέλεσμα, το WebRTC είναι ταχύτερο, αλλά το καθιστά επίσης πιο ευαίσθητο στις διακυμάνσεις του δικτύου.
Το WebRTC είναι το πρωτόκολλο για να χρησιμοποιήσετε εάν η λύση σας απαιτεί ροή από ομοτίμους, σε πραγματικό χρόνο. Ωστόσο, εάν χρειαστεί να αναπτύξετε το κοινό σας πάνω από 50 άτομα, θα πρέπει να επανεξετάσετε τη στρατηγική σας.
Σε σύγκριση με το HLS, η κλιμάκωση του WebRTC είναι ουσιαστικά πιο δύσκολη. Ωστόσο, αυτό μπορεί να λυθεί με μια υβριδική ροή εργασίας. Η επιλογή σας θα καθοριστεί από την περίπτωση χρήσης σας και το μέγεθος του κοινού -στόχου.
Όταν πρόκειται για την επίτευξη τεράστιων ακροατηρίων, τα πρωτόκολλα που βασίζονται σε HTTP βγαίνουν στην κορυφή. Ενώ “CDNs” Για το WebRTC υπάρχουν, το κόστος είναι συχνά απαγορευτικό.
Κόστος
Το WebRTC είναι ένα ελεύθερο και ανοιχτό πρωτόκολλο. Αλλά θυμηθείτε πώς μιλήσαμε για την κλιμάκωση WebRTC? Είναι απολύτως πιθανό και λειτουργεί αποτελεσματικά σε πολλές περιπτώσεις χρήσης – αλλά δεν είναι φθηνό. Εάν δεν χρειάζεται να μεταφέρετε σε εκατοντάδες ανθρώπους, το WebRTC είναι μια εξαιρετική επιλογή. Ωστόσο, εάν θέλετε να φτάσετε σε ένα μεγάλο ακροατήριο, θα πρέπει να ξοδέψετε χρήματα σε πρόσθετους διακομιστές για να μειώσετε το βάρος στο πρόγραμμα περιήγησης.
Το HLS είναι ίσως η πιο οικονομικά αποδοτική μέθοδος παράδοσης βίντεο. Η κλιμάκωση με CDN δικαιολογείται εύκολα από την άποψη του κόστους, επειδή χρησιμοποιεί προσιτές υποδομές HTTP και την τρέχουσα τεχνολογία δικτύου που βασίζεται σε TCP.
συμπέρασμα
Τα τελευταία δύο χρόνια, το πρωτόκολλο με βάση το HTTP και το WebRTC έχουν προχωρήσει πολύ. Παρά το γεγονός, είναι και οι δύο τεχνολογίες αιχμής που προωθούν τη βιομηχανία προς τα εμπρός, το καθένα έχει το δικό του σύνολο πλεονεκτημάτων και μειονεκτήματα. Ούτε η επιλογή είναι ιδανική για όλους, αλλά ένας από αυτούς μπορεί να είναι το καλύτερο για εσάς.
Στο τέλος, το βέλτιστο πρωτόκολλο θα καθοριστεί από τα χαρακτηριστικά του έργου σας, τις συσκευές στις οποίες θα διανεμηθεί και η κλίμακα του κοινού σας. Κατά την ανάπτυξη μιας λύσης χαμηλής καθυστέρησης, κρατήστε αυτά τα πράγματα στο μυαλό.
Περίεργος για την εύρεση της καλύτερης λύσης για εσάς? Επικοινωνήστε με τους ζωντανούς εμπειρογνώμονες ροής βίντεο!
HTTP, WebSocket, GRPC ή WebRTC: Ποιο πρωτόκολλο επικοινωνίας είναι το καλύτερο για την εφαρμογή σας?
Ενεργοποιήστε τη δωρεάν δοκιμή 30 ημερών σήμερα και ξεκινήστε τα πρωτότυπα.
- Δημιουργία συνομιλίας μέσω βίντεο
- Τι είναι ένα SFU
- Πρωτόκολλα ροής βίντεο
- Διάσκεψη βίντεο P2P
Μοιραστείτε το άρθρο σε:
Κατά την επιλογή ενός πρωτοκόλλου επικοινωνίας για τις εφαρμογές σας, υπάρχουν πολλές διαφορετικές επιλογές. Σε αυτήν την ανάρτηση, εμείς’Θα ρίξετε μια ματιά σε τέσσερις δημοφιλείς λύσεις: HTTP, Ιστοσελίδα, GRPC, και Webrtc. Θα διερευνήσουμε κάθε πρωτόκολλο διερευνώντας την τεχνολογία πίσω από αυτό, τι αυτό’που χρησιμοποιείται καλύτερα και τα δυνατά και αδυναμίες του.
· Δημοσιεύθηκε 26 Σεπτεμβρίου, 2022
Οι μορφές επικοινωνίας μας βελτιώνονται συνεχώς: να γίνουμε ταχύτερα, πιο βολικά και πιο αξιόπιστα. Η επικοινωνία μας έχει εξελιχθεί από την αποστολή μηνυμάτων χρησιμοποιώντας τα περιστέρια μεταφοράς, σε ταχυδρομική αλληλογραφία, στην εφεύρεση της σταθερής γραμμής, σε μηνύματα ηλεκτρονικού ταχυδρομείου και μηνύματα κειμένου από μια μικρή συσκευή που ταιριάζει στις τσέπες μας.
Στο μέλλον, μπορούμε ακόμη και να μεταβαθούμε συναντήσεις και πάρτι γενεθλίων στο VR (ελπίζουμε ότι αυτό είναι απλώς ένα αστείο!·. Αλλά η καλύτερη μορφή επικοινωνίας θα εξαρτάται πάντα από την κατάσταση.
Ένα γρήγορο μήνυμα κειμένου είναι μερικές φορές καλύτερο από ένα μακρύ email. Άλλες φορές, μια τηλεοπτική κλήση με την ομάδα είναι ο καλύτερος τρόπος για την ανταλλαγή πληροφοριών. Αντίθετα, πρέπει να αποστέλλονται σημαντικά ασφαλιστικά έγγραφα μέσω κανονικής αλληλογραφίας και να παραδοθούν σε έντυπη αντιγραφή.
Το ίδιο ισχύει και για τις τεχνολογίες και τα πρωτόκολλα Web που χρησιμοποιούμε. Διαφορετικές εφαρμογές έχουν διαφορετικές ανάγκες επικοινωνίας.
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
Σε αυτό το άρθρο, εμείς’Θα καλύψω μερικά δημοφιλή πρωτόκολλα επικοινωνίας Μπορούμε να χρησιμοποιήσουμε ως προγραμματιστές και να διερευνήσουμε τα πλεονεκτήματα και τα μειονεκτήματα των διαφόρων επιλογών. Καμία λύση δεν είναι καλύτερη από άλλη – υπάρχουν μόνο μερικά που είναι καλύτερα για μια συγκεκριμένη εφαρμογή ή πρόβλημα.
Ορισμένες εφαρμογές απαιτούν σύνδεση από ομοτίμους, με χαμηλή λανθάνουσα κατάσταση και υψηλή μεταφορά δεδομένων, και μπορούν να δεχθούν κάποια απώλεια πακέτων (πληροφορίες). Άλλες εφαρμογές μπορούν να δημοσιεύσουν τον διακομιστή με βάση την απαραίτητη βάση και τον Don’Δεν χρειάζεται να λαμβάνετε επικοινωνία από διαφορετικό ομότιμο. Άλλες εφαρμογές απαιτούν επικοινωνία σε πραγματικό χρόνο με αξιοπιστία δεδομένων.
Ένα online παιχνίδι για πολλούς παίκτες, εφαρμογή μηνυμάτων, ιστοσελίδα ιστολογίου, εφαρμογή γκαλερί μέσων ενημέρωσης και λογισμικό τηλεδιάσκεψης έχουν όλα διαφορετικά επίπεδα επικοινωνίας και αναγκών δεδομένων.
Εάν δημιουργείτε μια λύση ροής βίντεο, τότε υπάρχουν και άλλες εκτιμήσεις, δείτε το άρθρο μας σχετικά με τα πρωτόκολλα ροής βίντεο για περισσότερες πληροφορίες σχετικά με την επιλογή του σωστού.
Τι είναι ένα πρωτόκολλο επικοινωνίας?
Στη δικτύωση υπολογιστών, ένα πρωτόκολλο είναι ένα σύνολο κανόνων που διέπουν τον τρόπο ανταλλαγής δεδομένων μεταξύ συσκευών. Το πρωτόκολλο καθορίζει τους κανόνες, τη σύνταξη, τη σημασιολογία και τον συγχρονισμό της επικοινωνίας και τις πιθανές μεθόδους ανάκτησης σφαλμάτων.
Τα πρωτόκολλα που συζητήθηκαν σε αυτό το άρθρο καθορίζουν πώς το λογισμικό στρώματος εφαρμογής θα αλληλεπιδρά μεταξύ τους. Διαφορετικά πρωτόκολλα συμμορφώνονται με διαφορετικούς κανόνες και αυτό’είναι απαραίτητο για την κατανόηση των δυνάμεων και των περιορισμών του καθενός. Σε αυτό το άρθρο, εσείς’Θα μάθω τα ακόλουθα πρωτόκολλα:
HTTP (Πρωτόκολλο μεταφοράς HyperText) είναι ένα πρωτόκολλο εφαρμογής για τα κατανεμημένα, συνεργατικά και συστήματα πληροφοριών HyperMedia. Το HTTP είναι το θεμέλιο της επικοινωνίας δεδομένων για τον παγκόσμιο ιστό. Το HyperText είναι δομημένο κείμενο που χρησιμοποιεί λογικούς συνδέσμους (υπερσυνδέσεις) μεταξύ κόμβων που περιέχουν κείμενο. Το HTTP είναι το πρωτόκολλο για ανταλλαγή ή μεταφορά υπερκειμένου.
HTTP/2 σχεδιάστηκε για να αντιμετωπίσει τις αδυναμίες του αρχικού πρωτοκόλλου HTTP και τη βελτίωση της απόδοσης. Το HTTP/2 είναι ταχύτερο και πιο αποτελεσματικό από το HTTP/1.1, και υποστηρίζει την πολυπλεξία για να επιτρέψει την πολυπλέκτη πολλαπλών αιτημάτων και απαντήσεων σε μια ενιαία σύνδεση. Άλλα αξιοσημείωτα χαρακτηριστικά περιλαμβάνουν συμπίεση κεφαλίδας και ώθηση διακομιστή. Το’να γίνει σταδιακά το προεπιλεγμένο πρωτόκολλο για την κυκλοφορία ιστού.
Ιστοσελίδα είναι ένα πρωτόκολλο που επιτρέπει αμφίδρομη επικοινωνία μεταξύ ενός πελάτη και ενός διακομιστή. Είναι μια δημοφιλής επιλογή για εφαρμογές που χειρίζονται δεδομένα σε πραγματικό χρόνο, όπως εφαρμογές συνομιλίας, online gaming και ζωντανή ροή δεδομένων.
GRPC είναι ένα σύγχρονο πλαίσιο RPC ανοιχτού κώδικα που χρησιμοποιεί HTTP/2 για μεταφορά. Είναι μια εξαιρετική επιλογή για εφαρμογές που πρέπει να κάνουν πολλές μικρές, γρήγορες κλήσεις API. Το GRPC δημιουργεί δεσμεύσεις πελάτη και διακομιστή cross-platform για πολλές γλώσσες, επιτρέποντας σε μια εφαρμογή πελάτη να καλέσει άμεσα μια μέθοδο σε μια εφαρμογή διακομιστή σε διαφορετικό μηχάνημα σαν να ήταν τοπικό αντικείμενο.
Webrtc είναι μια τεχνολογία που επιτρέπει την επικοινωνία σε πραγματικό χρόνο μεταξύ των πελατών και καθιστά δυνατή τη δημιουργία άμεσων συνδέσεων peer-to-peer. Χρησιμοποιείται για εφαρμογές βίντεο, συνομιλίας, συνομιλίας, αρχείων και ζωντανής ροής βίντεο.
Κατανόηση του TCP και του UDP
Πριν βυθιστεί στα στρώματα εφαρμογής που αναφέρθηκαν παραπάνω, αυτό’είναι σημαντικό να έχουμε μια βασική κατανόηση του TCP και του UDP, δύο υποκείμενα στρώματα μεταφοράς που διευκολύνουν τη μεταφορά δεδομένων με θεμελιωδώς διαφορετικούς τρόπους.
TCP (πρωτόκολλο ελέγχου μετάδοσης) είναι ένα πρότυπο που καθορίζει τον τρόπο δημιουργίας και διατήρησης μιας συνομιλίας δικτύου μέσω του Διαδικτύου. Το TCP είναι το πιο συχνά χρησιμοποιούμενο πρωτόκολλο στο Διαδίκτυο και οποιοδήποτε δίκτυο προσανατολισμένο στη σύνδεση. Όταν περιηγείστε στον ιστό, ο υπολογιστής σας στέλνει πακέτα TCP σε διακομιστή ιστού. Ένας διακομιστής ιστού απαντά στέλνοντας πακέτα TCP πίσω στον υπολογιστή σας. Μια σύνδεση δημιουργείται για πρώτη φορά μεταξύ δύο συσκευών πριν από την ανταλλαγή δεδομένων και το TCP χρησιμοποιεί τη διόρθωση σφαλμάτων για να διασφαλιστεί ότι όλα τα πακέτα παρέχονται με επιτυχία. Εάν ένα πακέτο έχει χαθεί ή καταστραφεί, το TCP θα προσπαθήσει να το επαναφέρει.
UDP (πρωτόκολλο χρήστη Datagram) είναι ένα πρωτόκολλο στρώματος μεταφοράς χωρίς σύνδεση, αναξιόπιστο. Δεν απαιτεί μια σύνδεση που πρέπει να δημιουργηθεί ή να διατηρηθεί και δεν εγγυάται ότι τα μηνύματα θα παραδοθούν με τη σειρά. Που σημαίνει ότι μπορεί να υπάρξει κάποια απώλεια δεδομένων εάν ένα πακέτο δεν αποστέλλεται ή αν’κατεστραμμένος. Το UDP χρησιμοποιείται συχνά για εφαρμογές ροής ή εφαρμογών σε πραγματικό χρόνο, όπου τα πακέτα που πέφτουν είναι λιγότερο προβληματικά από τη διασφάλιση της παράδοσης.
HTTP/1
Το’είναι σημαντικό να έχετε μια βασική κατανόηση της θεμελίωσης όλων των διαδικτυακών επικοινωνιών και μεταφοράς δεδομένων στο επίπεδο εφαρμογής – HTTP (πρωτόκολλο μεταφοράς HyperText).
Η κατανόηση του HTTP/1 και των περιορισμών του θα είναι επίσης σημαντική πριν μπορέσουμε να διερευνήσουμε τα άλλα πρωτόκολλα με περισσότερες λεπτομέρειες και να εκτιμήσουμε πλήρως τι παρέχουν.
Με το HTTP, οι πελάτες και οι διακομιστές επικοινωνούν ανταλλάσσοντας μεμονωμένα μηνύματα. Τα μηνύματα που στέλνει ο πελάτης καλούνται αιτήματα και τα μηνύματα που αποστέλλονται από τον διακομιστή καλούνται απαντήσεις. Αυτά τα μηνύματα αποστέλλονται ως κανονικά μηνύματα κειμένου σε σύνδεση TCP. Μπορούν επίσης να κρυπτογραφηθούν χρησιμοποιώντας TLS και να σταλούν χρησιμοποιώντας το πρωτόκολλο HTTPS.
Ένας πελάτης θα είναι συνήθως ένα πρόγραμμα περιήγησης ιστού ή μια εφαρμογή που εκτελείται σε έναν χρήστη’S τηλέφωνο ή υπολογιστή, αλλά θα μπορούσε να είναι τεχνικά οτιδήποτε, για παράδειγμα, ένα σενάριο που σέρνει ιστοσελίδες.
Τα αιτήματα HTTP μπορούν να ρέουν μόνο προς μία κατεύθυνση, από τον πελάτη στον διακομιστή. Δεν υπάρχει τρόπος για τον διακομιστή να ξεκινήσει επικοινωνία με τον πελάτη. Μπορεί να ανταποκριθεί μόνο στα αιτήματα.
Το HTTP είναι ιδανικό για παραδοσιακές εφαρμογές ιστού και πελατών, όπου οι πληροφορίες λαμβάνονται σε βάση την ανάγλυφη βάση. Για παράδειγμα, ανανεώνετε μια σελίδα και υποβάλλεται ένα αίτημα στον διακομιστή για να λάβετε τις τελευταίες πληροφορίες.
Ωστόσο, αυτό το πρωτόκολλο επεκτάθηκε με τρόπο που δεν προοριζόταν αρχικά. Στα επόμενα τμήματα, εμείς’θα διερευνήσω μερικά από τα HTTP/1’περιορισμοί.
HTTP/1 σε πραγματικό χρόνο
Το HTTP/1 είναι αναποτελεσματικό όταν τα μηνύματα πρέπει να αποστέλλονται σε πραγματικό χρόνο από τον πελάτη στον διακομιστή και αντίστροφα. Για παράδειγμα, εάν είναι διαθέσιμες νέες πληροφορίες στον διακομιστή που πρέπει να μοιραστεί με τον πελάτη, αυτή η συναλλαγή μπορεί να εμφανιστεί μόνο μόλις ο πελάτης ξεκινήσει ένα αίτημα.
Υπάρχουν λύσεις για αυτό, χρησιμοποιώντας τεχνικές που ονομάζονται HTTP Short και Long Polling, καθώς και συμβάντα Server-Sent.
Βραχυχρόνια δημοσκόπηση
Η σύντομη δημοσκόπηση HTTP είναι μια τεχνική όπου ο πελάτης στέλνει επανειλημμένα αιτήματα στον διακομιστή μέχρι να απαντήσει με νέα δεδομένα. Μόλις λάβει δεδομένα ξεκινά ξανά τη διαδικασία και ρωτάει επανειλημμένα μέχρι να είναι διαθέσιμο κάτι άλλο.
Πρόκειται για μια αναποτελεσματική στρατηγική επικοινωνίας σε πραγματικό χρόνο, καθώς σπαταλάει πολλούς πόρους, μεταδίδοντας συνεχώς και αναλύοντας αιτήματα/απαντήσεις HTTP.
Μακρά δημοσκόπηση
Με μεγάλη δημοσκόπηση HTTP, γίνεται ένα μόνο αίτημα από τον πελάτη και στη συνέχεια ο διακομιστής διατηρεί αυτή τη σύνδεση ανοιχτή έως ότου υπάρχουν διαθέσιμα νέα δεδομένα και μια απάντηση μπορεί να σταλεί. Αφού ο πελάτης λάβει την απάντηση, μια νέα σύνδεση γίνεται αμέσως.
Η μεγάλη δημοσκόπηση είναι πιο αποτελεσματική από τη σύντομη δημοσκόπηση, αλλά δεν αποτελεί βέλτιστη λύση για επικοινωνία σε πραγματικό χρόνο.
Συμβάντα διακομιστή (SSE)
Τα συμβάντα που έχουν αποσταλεί διακομιστή επιτρέπουν σε έναν πελάτη να διατηρεί μια σύνδεση και να λαμβάνει ενημερώσεις (μηνύματα ώθησης) από έναν διακομιστή σε πραγματικό χρόνο, χωρίς να χρειάζεται να διερευνά τον διακομιστή για νέα δεδομένα συνεχώς. Αυτή είναι μια σύνδεση μονής κατεύθυνσης, οπότε δεν μπορείτε να στείλετε συμβάντα από τον πελάτη στον διακομιστή.
Το SSE είναι ένα πρότυπο που περιγράφει τον τρόπο με τον οποίο οι διακομιστές μπορούν να ξεκινήσουν τη μετάδοση δεδομένων προς τους πελάτες μόλις δημιουργηθεί μια αρχική σύνδεση πελάτη.
Το πρόβλημα απόδοσης με το HTTP/1
Οι περισσότερες από τις ροές δεδομένων HTTP αποτελούνται από μικρές μεταφορές δεδομένων, ενώ το TCP βελτιστοποιείται για μακροχρόνιες συνδέσεις και μεταφορές χύδην δεδομένων. Ο χρόνος μετ ‘επιστροφής στο δίκτυο είναι ο περιοριστικός παράγοντας στην απόδοση και την απόδοση TCP στις περισσότερες περιπτώσεις. Κατά συνέπεια, η καθυστέρηση είναι η συμφόρηση των επιδόσεων και οι περισσότερες εφαρμογές ιστού παρέχουν πάνω από αυτό.
Αυτό που σημαίνει τα παραπάνω είναι ότι το TCP, το οποίο χρησιμοποιεί το HTTP, κατασκευάστηκε για να χειριστεί μακροχρόνιες συνδέσεις και να μεταφέρει πολλά δεδομένα. Το HTTP/1, από την άλλη πλευρά, θα ανοίξει μια δέσμη σύντομων συνδέσεων TCP και συνήθως θα στείλει μόνο μικρά κομμάτια δεδομένων.
Αποκλεισμός κεφαλής της γραμμής
Ένα πρόβλημα απόδοσης με HTTP/1.0 είναι ότι πρέπει να ανοίξετε μια νέα σύνδεση TCP για κάθε αίτημα/απάντηση. Αυτό δεν ήταν πρόβλημα για το τι αρχικά εφευρέθηκε το HTTP – για να πάρει ένα έγγραφο HyperText. Το μέρος του εγγράφου είναι σημαντικό επειδή το HTTP δεν προοριζόταν για “υπερμεταρχία”.
Το άνοιγμα μιας νέας σύνδεσης TCP για κάθε αίτημα έγινε πρόβλημα καθώς εξελίχθηκε ο ιστός. Ξεκινήσαμε να χτίζουμε πλήρεις εφαρμογές αντί για απλές ιστοσελίδες και ο αριθμός των μέσων και των αρχείων που απαιτείται ένα πρόγραμμα περιήγησης για την ανάκτηση έγινε περισσότερο έγινε περισσότερο. Φανταστείτε μια τυπική εφαρμογή ιστού που απαιτεί αρχείο HTML, CSS και JavaScript, καθώς και διάφορες εικόνες και άλλα περιουσιακά στοιχεία. Για κάθε αρχείο έπρεπε να γίνει μια νέα σύνδεση.
Μαζί έρχεται http/1.1, η οποία έχει επίμονες συνδέσεις που καθορίζουν ότι μπορούμε να έχουμε περισσότερα από ένα αίτημα ή απάντηση στην ίδια σύνδεση TCP.
Αυτή η λύση είναι σίγουρα μια βελτίωση, αλλά δεν επιτρέπει στον διακομιστή να ανταποκρίνεται ταυτόχρονα με πολλαπλές απαντήσεις. Το’S ένα σειριοποιημένο πρωτόκολλο όπου πρέπει να στείλετε ένα αίτημα και να περιμένετε την απάντηση, στη συνέχεια, στείλτε το δεύτερο αίτημα και ούτω καθεξής. Αυτό είναι γνωστό ως αποκλεισμός κεφαλής της γραμμής.
Ωστόσο, είναι δυνατόν να επιτευχθεί παραλληλισμός, καθώς ένα πρόγραμμα περιήγησης μπορεί να ανοίξει έως και έξι συνδέσεις TCP με την ίδια προέλευση – όπου “προέλευση” ορίζεται ως ο μοναδικός συνδυασμός πλήθος και Λιμάνι αριθμός.
Για παράδειγμα, εάν έχετε μια εφαρμογή συλλογής φωτογραφιών που χρειάζεται να φορτώσει 12 εικόνες, τότε θα γίνουν έξι αιτήματα για τη φόρτωση των πρώτων έξι εικόνων και κάθε αίτημα θα ανοίξει μια νέα σύνδεση TCP κάτω από την κουκούλα. Οι άλλες έξι εικόνες θα μπλοκαριστούν μέχρι να ληφθεί μια απάντηση και μία από τις ανοιχτές συνδέσεις μπορεί να χρησιμοποιηθεί για τη φόρτωση της επόμενης εικόνας. Οι αρχικές έξι ανοιχτές συνδέσεις TCP με την ίδια προέλευση θα επαναχρησιμοποιηθούν καθώς θα είναι διαθέσιμες, αλλά περιορίζεστε σε έξι ενεργές συνδέσεις.
Φυσικά, οι προγραμματιστές βρήκαν μια εύκολη λύση – αλλάζοντας την προέλευση. Αντί να φιλοξενήσετε όλα τα περιουσιακά στοιχεία με την ίδια προέλευση, φιλοξενείτε έξι από τις εικόνες σε μία προέλευση και τα υπόλοιπα σε άλλο. Τώρα μπορείτε να έχετε 12 ταυτόχρονα αιτήματα (ή να ανοίξετε τις συνδέσεις TCP). Αυτό αναφέρεται ως “θραύση”.
- Εικόνες 1-6 φιλοξενούνται στο 1.εικόνες.com
- Εικόνες 7-12 φιλοξενούνται στις 2.εικόνες.com
Υπάρχει ένας περιορισμός για το πόσες φορές μπορείτε να το κάνετε αυτό, και αυτό’είναι δύσκολο να προσδιορίσουμε έναν βέλτιστο αριθμό θραυσμάτων. Σε κάποιο σημείο, η προσθήκη περισσότερων θραυσμάτων θα αυξήσει την πολυπλοκότητα, θα προσθέσει πάνω από το κεφάλι και θα μπορούσε να οδηγήσει σε συμφόρηση συνδέσμων και να χαθούν τα πακέτα.
Υπάρχουν επίσης και άλλες ανησυχίες, καθώς κάθε σύνδεση TCP προσθέτει περιττό γενικό κεφάλι στο διακομιστή. Οι συνδέσεις ανταγωνίζονται μεταξύ τους, κάθε χειραψία TCP και TLS προσθέτει περιττό κόστος και άλλοι πόροι διακομιστή/διακομιστή διακομιστή πρέπει να χρησιμοποιηθούν για τη διατήρηση των ενεργών συνδέσεων. Υπάρχει ένας σαφής περιορισμός στον τρόπο με τον οποίο το HTTP/1 χρησιμοποιεί τις υποκείμενες συνδέσεις TCP.
Οι κεφαλίδες και τα μπισκότα φουσκώνουν
Ένα άλλο πρόβλημα είναι ότι καθώς οι προδιαγραφές HTTP εξελίχθηκαν, έχουν προστεθεί περισσότερες κεφαλίδες στις προδιαγραφές. Οι προγραμματιστές έχουν επίσης τη δυνατότητα να προσθέσουν cookies στις κεφαλίδες, και αυτά μπορεί να είναι αυθαίρετα μεγάλα. Αυτό προσθέτει πολύ φούσκωμα, καθώς κάθε αίτημα και απάντηση πρέπει να μεταδώσει όλες αυτές τις πληροφορίες κειμένου και HTTP/1.1 δεν περιλαμβάνει μηχανισμό για την συμπίεση κεφαλίδων και μεταδεδομένων.
Εάν χρειάζεστε ένα πρωτόκολλο RPC υψηλής απόδοσης, αυτό το γενικό κεφάλι προσθέτει γρήγορα και το HTTP δεν είναι πλέον βέλτιστη λύση.
Προτεραιότητα
Με HTTP/1.1, προγράμματα περιήγησης “δίνω προτεραιότητα” Πόροι κρατώντας μια ουρά προτεραιότητας στον πελάτη και λαμβάνοντας εκπαιδευμένες εικασίες για το πώς να αξιοποιήσετε την καλύτερη χρήση των διαθέσιμων συνδέσεων TCP. Τα προγράμματα περιήγησης έχουν ενσωματώσει ευρετικά για τον προσδιορισμό των πόρων που είναι πιο πολύτιμοι από τους άλλους.
Για παράδειγμα, η φόρτωση του CSS θα λάβει υψηλότερη προτεραιότητα από τη φόρτωση εικόνων.
Το πρόβλημα είναι ότι δεν υπάρχει τρόπος για εσάς, ως προγραμματιστής, να δώσετε προτεραιότητα σε ένα αίτημα έναντι άλλου ή να αλλάξετε την προτεραιότητα ενός συνεχούς μηνύματος. Ποιο περιεχόμενο φορτώνεται πρώτα είναι μέχρι το πρόγραμμα περιήγησης και δεν έχετε λόγο στο σχήμα ιεράρχησης.
HTTP/2
Το HTTP/2 είναι μια βελτιωμένη έκδοση του πρωτοκόλλου HTTP και αντιμετωπίζει όλα τα θέματα απόδοσης που περιγράφονται παραπάνω με το HTTP/1 και προσθέτει άλλες βελτιώσεις χωρίς να αλλάζουν κανένα από τα σημασιολογικά (ρήματα, κεφαλίδες κ.λπ.).
Η πιο σημαντική αλλαγή στο HTTP/2 είναι η χρήση της πολυπλεξίας για ταυτόχρονα αποστολή και λήψη πολλαπλών αιτήσεων και απαντήσεων HTTP μέσω ενός Μονή σύνδεση TCP. Όλες οι συνδέσεις HTTP/2 είναι επίμονες και απαιτείται μόνο μία σύνδεση ανά προέλευση. Αυτό επιτρέπει πολύ πιο αποτελεσματική χρήση των πόρων του δικτύου και μπορεί να βελτιώσει σημαντικά την απόδοση των εφαρμογών.
Μερικά άλλα οφέλη του HTTP/2:
- Χρησιμοποιεί συμπίεση κεφαλίδας για να μειώσει το μέγεθος των κεφαλίδων, η οποία αποφεύγει την αποστολή των ίδιων κεφαλίδων απλού κειμένου ξανά και ξανά. Αυτό μειώνει σημαντικά το γενικό κόστος των αιτήσεων/απαντήσεων και το ποσό των αποστέλλονται τα δεδομένα.
- Επιτρέπει την ιεράρχηση, επιτρέποντας στον πελάτη (προγραμματιστής) να καθορίσει την προτεραιότητα των πόρων που χρειάζεται. Το’Επίσης, είναι δυνατόν να ενημερωθεί η προτεραιότητα των συνεχιζόμενων αιτημάτων – για παράδειγμα, σε κύλιση, εάν μια εικόνα δεν είναι πλέον ορατή, η προτεραιότητα μπορεί να αλλάξει.
- Χρησιμοποιεί το διακομιστή Push για να στείλει δεδομένα στον πελάτη πριν το ζητήσει. Αυτό μπορεί να χρησιμοποιηθεί για τη βελτίωση των χρόνων φόρτωσης εξαλείφοντας την ανάγκη για τον πελάτη να κάνει πολλαπλά αιτήματα.
Πώς λειτουργεί το HTTP/2?
Η βασική μονάδα πρωτοκόλλου στο HTTP/2 είναι α πλαίσιο. Αυτός ο νέος μηχανισμός διακοσμητικής πλαισίας αλλάζει τον τρόπο ανταλλαγής των δεδομένων μεταξύ του πελάτη και του διακομιστή.
Το πρότυπο ορίζει δέκα διαφορετικούς τύπους πλαισίων, καθένα από τα οποία εξυπηρετεί διαφορετικό σκοπό. Για παράδειγμα, οι κεφαλίδες και τα πλαίσια δεδομένων αποτελούν τη βάση των αιτήσεων και των απαντήσεων HTTP:
ΕΝΑ πλαίσιο είναι η μικρότερη μονάδα επικοινωνίας που μεταφέρει έναν συγκεκριμένο τύπο δεδομένων.
Μερικά άλλα παραδείγματα πλαισίου είναι:
- Ρυθμίσεις: Πληροφορίες ρύθμισης ανταλλαγής στην αρχή ή κατά τη διάρκεια μιας σύνδεσης.
- Προτεραιότητα: Επανατοποθετήστε την προτεραιότητα για μηνύματα.
- Push_promise: επιτρέπει στον διακομιστή να σας ωθήσει δεδομένα – αυτό λειτουργεί ως υπόσχεση για το τι θα στείλει ο διακομιστής. Για παράδειγμα, εάν ζητήσετε το ευρετήριο.HTML, ο διακομιστής μπορεί να δημιουργήσει ένα push_promise που υπόσχεται να πιέσει την εφαρμογή.JS και Styles.CSS, που σημαίνει ότι ο πελάτης δεν χρειάζεται να ζητήσει αυτούς τους πόρους.
Τα πλαίσια συνδυάζονται για να σχηματίσουν ένα μήνυμα, Για παράδειγμα, η κεφαλίδα και το πλαίσιο δεδομένων στην παραπάνω εικόνα. Αυτό ισοδυναμεί με κανονικό αίτημα ή απάντηση.
Τέλος, μια σειρά από μηνύματα μπορεί να είναι μέρος ενός ρεύμα. Αυτό επιτρέπει τη ροή των αμφίδρομων δεδομένων μεταξύ του πελάτη και του διακομιστή και της πολυπλεξίας πλήρους αιτήματος και απάντησης.
Η παραπάνω εικόνα είναι λίγο παραπλανητική, δίνοντας την εντύπωση ότι οι πολλαπλές συνδέσεις είναι ανοιχτές μεταξύ του πελάτη και του διακομιστή. Αλλά είναι μια ενιαία σύνδεση TCP και τα δεδομένα ρέουν ελεύθερα μεταξύ του πελάτη και του διακομιστή με τρόπο μη αποκλεισμού.
Το νέο στρώμα πλαισίωσης του νέου δυαδικού επιτρέπει στον πελάτη και τον διακομιστή να σπάσει το μήνυμα HTTP σε ανεξάρτητα πλαίσια, να τα παρεμβάλλει και στη συνέχεια να τα επανασυναρμολογήσει στο άλλο άκρο.
Αυτή είναι μόνο μια περίληψη του τρόπου με τον οποίο HTTP/2.0 Έργα. Εάν θέλετε να μάθετε περισσότερα και να εξερευνήσετε την ιεράρχηση, την ώθηση του διακομιστή και τη συμπίεση κεφαλίδας, δείτε αυτό το σε βάθος άρθρο. Για ένα ιστορικό των προβλημάτων του HTTP/1 και του τρόπου με τον οποίο τα επιλύει HTTP/2, παρακολουθήστε αυτό το βίντεο.
Ροή αμφίδρομων δεδομένων HTTP/2
- Μια ενιαία σύνδεση HTTP/2 μπορεί να περιέχει πολλαπλά ταυτόχρονα ανοικτά ρεύματα, με είτε τα πλαίσια ενδιάμεσης τελικού σημείου από πολλαπλές ροές.
- Οι ροές μπορούν να δημιουργηθούν και να χρησιμοποιηθούν μονομερώς ή να μοιραστούν είτε από τον πελάτη είτε από το διακομιστή.
- Οι ροές μπορούν να κλείσουν με κάθε τελικό σημείο.
Υπάρχει πολλή παρεξήγηση με τη λειτουργικότητα Push Server, η οποία επιτρέπει σε έναν διακομιστή μέσω HTTP/2 να στέλνει προληπτικά πόρους που πιστεύει ότι μπορεί να χρειαστείτε, για παράδειγμα, το .JS και .αρχεία CSS, χωρίς τον πελάτη να το ζητήσει. Αυτό δεν έχει καμία σχέση με την αμφίδρομη ροή και είναι μόνο μια τεχνική βελτιστοποίησης ιστού για τους αποθηκευτικούς πόρους.
Αυτό που είναι αλήθεια είναι ότι με το HTTP/2 ο διακομιστής μπορεί’να ξεκινήσω ένα ρεύμα. Αλλά μόλις ο πελάτης ανοίξει ένα ρεύμα στέλνοντας ένα αίτημα, και οι δύο πλευρές μπορούν να στείλουν δεδομένα πλαίσια πάνω από μια επίμονη υποδοχή ανά πάσα στιγμή. Ένα εξαιρετικό παράδειγμα αυτού είναι το GRPC, το οποίο θα συζητήσουμε αργότερα.
Με το HTTP/2, είναι δυνατόν να επιτευχθεί αμφίδρομη ροή δεδομένων και θα μπορούσατε να υποστηρίξετε ότι αυτό’είναι μια πιο βέλτιστη λύση από κάτι σαν websockets, ή θα μπορούσατε να υποστηρίξετε ότι δεν είναι. Εμείς’Θα το συζητήσω λεπτομερέστερα στην ενότητα Websocket.
Websockets
Ο στόχος αυτής της τεχνολογίας είναι να παρέχει έναν μηχανισμό για εφαρμογές που βασίζονται σε προγράμματα περιήγησης που χρειάζονται αμφίδρομη επικοινωνία με διακομιστές που δεν βασίζονται στο άνοιγμα πολλαπλών συνδέσεων HTTP (e.σολ., Χρήση xmlhttprequest ή iframes και μακρά δημοσκόπηση).
Τα WebSockets εφευρέθηκαν για να επιτρέψουν την επικοινωνία πλήρους διπλής όψης μεταξύ ενός πελάτη και ενός διακομιστή, η οποία επιτρέπει στα δεδομένα να ταξιδεύουν και στους δύο τρόπους μέσω μιας ενιαίας ανοικτής σύνδεσης αμέσως.
Μόλις δημιουργηθεί μια σύνδεση websocket, ο πελάτης δεν χρειάζεται να δημοσκοπήσει έναν διακομιστή για ενημερώσεις. Αντ ‘αυτού, η επικοινωνία συμβαίνει αμφίδρομα. Αυτό βελτιώνει την ταχύτητα και την ικανότητα σε πραγματικό χρόνο σε σύγκριση με την αρχική μακρά και σύντομη δημοσίευση του HTTP/1. Το Websocket δεν έχει μορφή με την οποία συμμορφώνεται. Μπορείτε να στείλετε οποιαδήποτε δεδομένα, κείμενο ή bytes – αυτή η ευελιξία είναι ένας από τους λόγους για τους οποίους οι websockets είναι δημοφιλείς.
Μερικά από αυτά μπορεί να ακούγονται γνωστά σε αυτό που συζητήσαμε στην ενότητα HTTP/2, αλλά αυτό’Σημαντικό να σημειωθεί ότι τα websockets εφευρέθηκαν πολύ πριν από το http/2. Εμείς’Θα τα συγκρίνω περισσότερο αργότερα.
Πώς λειτουργούν οι websockets
Οι WebSockets εκτελούνται αποτελεσματικά ως στρώμα μεταφοράς μέσω TCP.
Για να δημιουργήσετε μια σύνδεση websocket, ο πελάτης και ο διακομιστής πρέπει πρώτα να εκτελούν μια χειραψία σε ένα κανονικό HTTP/1.1 σύνδεση. Αυτή η χειραψία είναι η γέφυρα από το HTTP έως το WebSockets.
Παρακάτω είναι ένα παράδειγμα αίτησης χειραψίας πελάτη. Ο πελάτης μπορεί να χρησιμοποιήσει ένα HTTP/1.1 μηχανισμός που ονομάζεται κεφαλίδα αναβάθμισης για να αλλάξει τη σύνδεσή τους από το HTTP σε WebSockets:
Λήψη /συνομιλία http /1.1 οικοδεσπότης: Παράδειγμα.COM: 8000 Αναβάθμιση: Σύνδεση WebSocket: Αναβάθμιση Sec-Websocket-Key: Dghlihnhbxbszsbub25jzq == Sec-Websocket-Version: 13
Ο διακομιστής θα ολοκληρώσει στη συνέχεια τη χειραψία με μια ειδική απάντηση που υποδεικνύει ότι το πρωτόκολλο θα αλλάξει από HTTP σε Websocket:
HTTP/1.1 101 Αναβάθμιση πρωτοκόλλων μεταγωγής: Σύνδεση WebSocket: Αναβάθμιση Sec-Websocket-Paccept: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
Οι WebSockets απαιτούν ένα ενιαίο αναγνωριστικό πόρων (URI) με ένα πρόγραμμα ws: // ή wss: //. Το σχήμα ws: // χρησιμοποιείται για μη κρυπτογραφημένες συνδέσεις και το σχήμα wss: // χρησιμοποιείται για κρυπτογραφημένες συνδέσεις, παρόμοιες με τον τρόπο με τον οποίο οι διευθύνσεις HTTP χρησιμοποιούν http: // ή https: // scheme.
Μόλις δημιουργηθεί το αμφίδρομο κανάλι επικοινωνίας, ο πελάτης και ο διακομιστής μπορούν να στείλουν μηνύματα εμπρός και πίσω. Αυτά τα μηνύματα μπορεί να είναι οτιδήποτε από δυαδικά δεδομένα σε κείμενο. Η σύνδεση WebSocket θα παραμείνει ανοιχτή μέχρι να αποσυνδεθεί ο πελάτης ή ο διακομιστής.
Πολυπλεξία websocket
Κατά τη στιγμή της γραφής, το πρωτόκολλο WebSocket δεν υποστηρίζει ενσωματωμένη πολυπλεξία. Συζητήσαμε την πολυπλεξία στην ενότητα HTTP/2 και μάθαμε ότι’είναι ένα ενσωματωμένο χαρακτηριστικό για το HTTP/2, και αυτό’είναι πιθανό να έχουν πολλαπλές ροές πολυπλέκονται πάνω από την ίδια σύνδεση. Κάθε ρεύμα παίρνει ένα μοναδικό αναγνωριστικό και όλα τα αποστέλλονται τα πλαίσια έχουν ένα αναγνωριστικό που σχετίζεται με την αντίστοιχη ροή.
Η μη υποστήριξη πολυπλεξίας σημαίνει ότι το πρωτόκολλο WebSocket απαιτεί νέα σύνδεση μεταφοράς για κάθε σύνδεση websocket. Για παράδειγμα, πολλοί πελάτες που εκτελούνται σε διαφορετικές καρτέλες του ίδιου προγράμματος περιήγησης θα έχουν ως αποτέλεσμα ξεχωριστές συνδέσεις. Για να έχετε πολυπλεξία μέσω WebSockets είναι συνήθως κάτι που θα χρειαστεί να εφαρμόσετε ως προγραμματιστής ή να βασιστείτε σε ένα τρίτο plugin ή βιβλιοθήκη.
WebSocket VS HTTP/2
Έτσι, έχει αντικαταστήσει το HTTP/2? Η σύντομη απάντηση είναι όχι. Η μεγαλύτερη απάντηση είναι ότι το HTTP/2 καθιστά δυνατή την αμφίδρομη ροή και ως εκ τούτου, οι WebSockets δεν είναι η μόνη/καλύτερη επιλογή. Το HTTP/2 ως spec κάνει περισσότερη δουλειά για εσάς σε σύγκριση με το WebSockets. Έχει ενσωματωμένη πολυπλεξία και, στις περισσότερες περιπτώσεις, θα έχει ως αποτέλεσμα λιγότερες ανοιχτές συνδέσεις TCP με την προέλευση. Από την άλλη πλευρά, τα websockets παρέχουν πολλή ελευθερία και δεν είναι περιοριστικά στον τρόπο με τον οποίο τα δεδομένα αποστέλλονται μεταξύ του πελάτη και του διακομιστή μόλις δημιουργηθεί μια σύνδεση. Ωστόσο, θα χρειαστεί να διαχειριστείτε τον εαυτό σας (ή να βασιστείτε σε μια βιβλιοθήκη που το κάνει αυτό για εσάς).
Ποιο είναι το τελικά καλύτερο, και όπου κάποιος θα λειτουργήσει και ο άλλος δεν θα είναι, είναι έτοιμος για συζήτηση, και αυτό το άρθρο δεν παρέχει μια απογοητευμένη απάντηση. Οι WebSockets προσφέρουν μεγάλη ευελιξία και ως καθιερωμένο πρότυπο υποστηρίζεται πλήρως από όλα τα σύγχρονα προγράμματα περιήγησης και το οικοσύστημα γύρω από τις βιβλιοθήκες πελατών και διακομιστών είναι ισχυρές.
Για πιο λεπτομερείς και φιλόδοξες συζητήσεις, ανατρέξτε στις ερωτήσεις Overflow:
- Το http/2 καθιστά παρωχημένο το websocket
- Http/2 ή websockets για χαμηλή λανθάνουσα κατάσταση πελάτη σε μηνύματα διακομιστή
- HTTP/2 VS Web-Socket για ροή μηνυμάτων αμφίδρομης
Υπάρχει επίσης ένα RFC για να επιτρέπεται ένας μηχανισμός για τη λειτουργία του πρωτοκόλλου WebSocket σε ένα μόνο ρεύμα σύνδεσης HTTP/2.
Η δυνατότητα εκκίνησης Websockets από το HTTP/2 επιτρέπει την κοινή χρήση μιας σύνδεσης TCP και από τα δύο πρωτόκολλα και επεκτείνει την πιο αποτελεσματική χρήση του δικτύου HTTP/2.
Αυτό έχει εφαρμοστεί σε Chrome και Firefox. Μπορείτε να διαβάσετε το έγγραφο σχεδιασμού Chrome και τα κίνητρα εδώ.
Πότε πρέπει να χρησιμοποιήσετε το websockets?
Τα WebSockets είναι καλύτερα κατάλληλα για εφαρμογές που χρειάζονται αμφίδρομη επικοινωνία σε πραγματικό χρόνο και όταν πρέπει να μεταδίδονται γρήγορα μικρά κομμάτια δεδομένων, για παράδειγμα:
- Αιτήσεις συνομιλίας
- Παιχνίδια για πολλούς παίκτες
- Εφαρμογές συνεργασίας
- Ζωντανό αθλητικό ticker
- Αίτηση συναλλαγών μετοχών
- Τροφοδοσίες δραστηριότητας σε πραγματικό χρόνο
Συμπτωματικά, αυτός είναι ένας χώρος όπου η ομάδα μας έχει πολλή εμπειρία. Εμείς’επαναλαμβάνονται εκτενώς χρησιμοποιώντας websockets για να τροφοδοτήσουν τη συνομιλία και τη δραστηριότητά μας τροφοδοσίες υποδομής.
Η υποστήριξη για το WebSockets είναι καλή και έχει υποστηριχθεί από μεγάλα προγράμματα περιήγησης και πελάτες για μεγάλο χρονικό διάστημα και είναι επίσης καλά τεκμηριωμένη και εύκολη στη χρήση. Ωστόσο, οι websockets δεν πρέπει να χρησιμοποιούνται υπερβολικά. Ανάλογα με το τι θέλετε, μπορεί να υπάρχουν καλύτερες εναλλακτικές λύσεις.
Για παράδειγμα, τα Events Sender Send (SSE) είναι αποτελεσματικά μέσω HTTP/2 και απλές στη χρήση. Το SSE δεν είναι σύστημα επικοινωνίας με αμφίδρομη επικοινωνία. Ο διακομιστής ωθεί μονομερώς τα δεδομένα στον πελάτη. Αλλά αν το μόνο που χρειάζεστε είναι ένας τρόπος για τον διακομιστή να στείλει δεδομένα σε έναν πελάτη, αυτό είναι ενδεχομένως μια καλύτερη επιλογή από την προσθήκη των γενικών εξόδων των websockets. Το SSE πέφτει επίσης στο HTTP/1.1 Όταν το HTTP/2 δεν είναι διαθέσιμο. Επιπλέον, ο πελάτης (ή το πρόγραμμα περιήγησης) διαχειρίζεται τη σύνδεση για εσάς και υποστηρίζει αυτόματη επανασύνδεση.
Εάν χάσει μια σύνδεση μέσω WebSockets, δεν υπάρχουν μηχανισμοί που περιλαμβάνονται για εξισορρόπηση φορτίου ή για επανασύνδεση. Αυτό πρέπει να εφαρμοστεί με το χέρι ή από τις βιβλιοθήκες τρίτων.
GRPC
Το GRPC είναι ένα σύγχρονο πλαίσιο τηλεπικοινωνιακής διαδικασίας υψηλής απόδοσης (RPC) που μπορεί να εκτελεστεί σε οποιοδήποτε περιβάλλον. Μπορεί να συνδέσει αποτελεσματικά τις υπηρεσίες εντός και σε κέντρα δεδομένων με υποστήριξη για την εξισορρόπηση φορτίου, τον εντοπισμό, τον έλεγχο υγείας και τον έλεγχο ταυτότητας. Εφαρμόζεται επίσης στο τελευταίο μίλι από κατανεμημένους υπολογιστές για να συνδέσετε συσκευές, κινητές εφαρμογές και προγράμματα περιήγησης σε υπηρεσίες backend.
Το GRPC είναι ένα ανοιχτό κώδικα, το σύστημα RPC που αναπτύχθηκε αρχικά στο Google. Το GRPC επιτρέπει στις εφαρμογές να επικοινωνούν με διαφάνεια και να απλοποιούν την οικοδόμηση συνδεδεμένων συστημάτων.
Δημιουργεί δεσμεύσεις πελάτη και διακομιστή cross-platform για πολλές γλώσσες, επιτρέποντας σε μια εφαρμογή πελάτη να καλέσει άμεσα μια μέθοδο σε μια εφαρμογή διακομιστή σε διαφορετικό μηχάνημα σαν να ήταν τοπικό αντικείμενο.
Χτισμένο σε HTTP/2, το GRPC αξιοποιεί χαρακτηριστικά όπως η αμφίδρομη ροή και η ενσωματωμένη ασφάλεια στρώματος μεταφοράς (TLS).
Κίνητρο GRPC
Το’είναι σημαντικό να βουτήξετε στο κίνητρο πίσω από το GRPC και γιατί εφευρέθηκε για να κατανοήσει τα οφέλη του. Γιατί να μην χρησιμοποιήσετε την υπάρχουσα τεχνολογία που έχουμε ήδη: HTTP/2 και WebSockets, για παράδειγμα? Γιατί χρειαζόμαστε ένα άλλο στρώμα αφαίρεσης πάνω από αυτό που έχουμε ήδη?
Υπάρχουν διάφοροι τρόποι με τους οποίους τα δεδομένα μπορούν να δομηθούν και να σταλούν μέσω του Διαδικτύου. Μερικά δημοφιλή παραδείγματα είναι σαπούνι, ανάπαυση και graphQL. Μπορείτε ακόμη να δημιουργήσετε το δικό σας πρωτόκολλο, να στείλετε δεδομένα μέσω του RAW TCP και να χειριστείτε τον εαυτό σας εάν θέλετε.
Αλλά ανεξάρτητα από το τι επιλέγετε ως πρωτόκολλο επικοινωνίας σας, το πρόβλημα είναι ότι πρέπει να διασφαλίσετε ότι ο πελάτης και ο διακομιστής συμφωνούν στο πρωτόκολλο. Για παράδειγμα, αν εσείς’Επιστροφή ενός API REST, η βιβλιοθήκη πελατών που πρέπει να χρησιμοποιήσετε για να στείλετε δεδομένα REST είναι η βιβλιοθήκη HTTP. Η βιβλιοθήκη HTTP είναι ενσωματωμένη στο πρόγραμμα περιήγησης από προεπιλογή και το πρόγραμμα περιήγησης χειρίζεται τα πάντα για εσάς:
- Δημιουργεί επικοινωνία με τον διακομιστή.
- Χειρίζεται το HTTP/2 και το Fallback στο HTTP/1. Και θα πρέπει να υποστηρίξει το HTTP/3 στο μέλλον.
- Χειρίζεται το TLS και διαπραγματεύεται το πρωτόκολλο.
- Χειρίζεται κεφαλίδες, ρέματα και οτιδήποτε άλλο.
Αλλά τι γίνεται αν εσύ’δεν είναι σε πρόγραμμα περιήγησης? Τι γίνεται αν εσείς’Re re Application Python που εκτελείται σε κάποιο διακομιστή, ένα Golang CLI ή μια εφαρμογή Flutter που εκτελείται στο iOS? Όλοι αυτοί οι πελάτες χρειάζονται τη δική τους βιβλιοθήκη HTTP που κατανοεί το πρωτόκολλο με το οποίο επικοινωνείτε.
Ευτυχώς, πολλοί αφοσιωμένοι άνθρωποι εργάζονται σε διάφορες βιβλιοθήκες HTTP για όλες αυτές τις γλώσσες και τα πλαίσια. Ορισμένες γλώσσες έχουν ακόμη και πολλές βιβλιοθήκες HTTP με διαφορετικά χαρακτηριστικά. Όλα αυτά, ωστόσο, έρχονται με κόστος – και αυτό είναι συντήρηση.
Αυτό το κόστος θα μπορούσε να σας επηρεάσει σε περίπτωση που επρόκειτο, για παράδειγμα, αναβαθμίστε τον διακομιστή σας σε http/2 εάν η βιβλιοθήκη golang που χρησιμοποιείτε υποστηρίζει. Αλλά, στον πελάτη Python Front-end, η ισοδύναμη βιβλιοθήκη HTTP δεν έχει εφαρμόσει HTTP/2 ή δεν μπορεί πλέον να διατηρηθεί. Διαφορετικές βιβλιοθήκες HTTP σε άλλες γλώσσες δεν μπορούν να συγκριθούν 1: 1.
Καθώς εξελίσσεται το spec HTTP, αυτές οι βιβλιοθήκες πρέπει να συμβαδίζουν με τις εξελίξεις, τα θέματα ασφάλειας, τα νέα χαρακτηριστικά και άλλα μπαλώματα. Το HTTP είναι απλώς ένα παράδειγμα και το ίδιο ισχύει και για το πρωτόκολλο WebSocket ή οποιοδήποτε άλλο. Κάτι μπορεί να εφαρμοστεί καλά στα μεγάλα προγράμματα περιήγησης, αλλά αυτή η λειτουργικότητα πρέπει να μεταφερθεί σε πολλές διαφορετικές γλώσσες και πλαίσια.
Πώς είναι διαφορετικό το GRPC?
Το GRPC επιχειρεί να λύσει αυτό το πρόβλημα διατηρώντας τη βιβλιοθήκη για τις δημοφιλείς γλώσσες, πράγμα που σημαίνει ότι τα νέα χαρακτηριστικά που προστίθενται θα υποστηριχθούν από όλες αυτές τις γλώσσες.
Κάτω από την κουκούλα, το GRPC χρησιμοποιεί το HTTP/2 ως πρωτόκολλο της, ωστόσο, αυτή η εφαρμογή είναι κρυμμένη από εσάς. Στο μέλλον, οι συντηρητές του GRPC θα μπορούσαν εύκολα να αντικαταστήσουν το HTTP/2 με HTTP/3 και θα επωφεληθείτε αμέσως από αυτή την αλλαγή.
Το GRPC χρησιμοποιεί επίσης buffers πρωτοκόλλου ως γλώσσα ορισμού διασύνδεσης (IDL) και το υποκείμενο message message message. Αυτή η μορφή είναι ουδέτερη γλώσσα και καθιστά δυνατή την εύκολη επικοινωνία μεταξύ διαφορετικών γλωσσών προγραμματισμού. Εμείς’θα διερευνήσω αυτήν την ιδέα περισσότερο στην επόμενη ενότητα.
Τι είναι τα buffer του πρωτοκόλλου?
Τα ρυθμιστικά πρωτοκόλλου είναι η ουδέτερη γλωσσική, ουδέτερη πλατφόρμα, ο ουδέτερο, επεκτάσιμος μηχανισμός για τη σειριοποίηση δομημένων δεδομένων-σκέφτεστε το XML, αλλά μικρότερο, ταχύτερο και απλούστερο. Καθορίζετε πώς θέλετε τα δεδομένα σας να δομηθούν μία φορά. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε ειδικά παραγόμενο πηγαίο κώδικα για να γράψετε εύκολα και να διαβάσετε τα δομημένα δεδομένα σας από και προς μια ποικιλία ροών δεδομένων και χρησιμοποιώντας μια ποικιλία γλωσσών.
Παραδοσιακά με ένα API, δεν don’δεν έχει συμβόλαιο που ορίζεται από το ίδιο το πρωτόκολλο. Για παράδειγμα, αν εσείς’Χρησιμοποιώντας ανάπαυση, εσείς’Τυπικά στέλνοντας απλά μηνύματα JSON με ζεύγη κλειδιών/αξίας που αρένα’δεν ελέγχεται έως ότου το μήνυμα βρίσκεται στο τέλος λήψης. Αυτό το μήνυμα μπορεί τυπικά να είναι οτιδήποτε, και αυτό’σε εσάς για να διασφαλίσετε ότι ορίζεται η σωστή δομή.
Ρίξτε μια ματιά στο ακόλουθο ωφέλιμο φορτίο JSON:
‘ταυτότητα’: 123 ‘όνομα’: ‘Γκόρντον’, ‘ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ’: ‘gordon@κάπου.IO’
Μόλις ληφθούν αυτά τα δεδομένα στον πελάτη/διακομιστή, μπορεί να αποταμιευτεί σε ένα αντικείμενο, για παράδειγμα:
μαθητής
Ωστόσο, εξαρτάται από εσάς ως τον προγραμματιστή να εφαρμόσει τη σωστή λογική σειριοποίησης και αποταμιευτικής για το προαναφερθέντα ωφέλιμο φορτίο – αυτό μπορεί να περιλαμβάνει τη γραφή Tojson και Fromjson μεθόδων με μη αυτόματο τρόπο, βασιζόμενη στην παραγωγή κώδικα ή θα μπορούσε να είναι ένα ενσωματωμένο χαρακτηριστικό της γλώσσας που εσείς’Re Χρήση.
Ανεξάρτητα από τον τρόπο με τον οποίο σειριοποιήσετε αυτά τα δεδομένα, ο υποκείμενος κώδικας θα πρέπει να ενημερωθεί με το χέρι, ενδεχομένως σε πολλαπλά περιβάλλοντα, σε περίπτωση που το σχήμα αλλάξει.
Με τα buffer του πρωτοκόλλου, δημιουργείτε ένα σχήμα που ορίζει τον τύπο αντικειμένου για πεδία και καθορίστε ποιες απαιτούνται και ποιες είναι προαιρετικές:
// Το μήνυμα αιτήματος που περιέχει το άτομο’S Πληροφοριακό μήνυμα Πληροφοριών < optional int32 required string name = 2; optional string email = 3; >// Το μήνυμα απόκρισης που περιέχει το μήνυμα χαιρετισμών Helloreply
Στη συνέχεια, μπορείτε να καθορίσετε τις διαδικασίες που θέλετε να εκθέσετε.
// Ο ορισμός της υπηρεσίας ευχετήριων. σέρβις < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Μόλις εσύ’Το VE καθορίζει τις δομές και το σχήμα δεδομένων, χρησιμοποιείτε το πρωτόκολλο μεταγλωττιστή πρωτοκόλλου για να δημιουργήσετε κατηγορίες πρόσβασης δεδομένων στις προτιμώμενες γλώσσες (ες) από τον ορισμό σας Proto.
Αυτές θα είναι διεπαφές που περιγράφουν τα αντικείμενα που περιγράφονται στο αρχείο Proto, με αξεσουάρ για κάθε πεδίο, καθώς και μεθόδους για τη σειριοποίηση/ανάλυση ολόκληρης της δομής προς/από ακατέργαστα bytes.
Λειτουργίες GRPC
Υπάρχουν τέσσερις τρόποι μεταφοράς μέσω του GRPC. Αυτές οι τέσσερις λειτουργίες αναπαράγουν τη συμπεριφορά που συζητήσαμε προηγουμένως, για παράδειγμα, ένα κανονικό αίτημα/απάντηση, SSE και WebSockets.
Unary RPC
Το Unary RPC είναι ένα απλό αίτημα και απάντηση, παρόμοια με την κλήση μιας συνάρτησης. Ο πελάτης ζητά ορισμένα δεδομένα και ο διακομιστής κάνει κάποια επεξεργασία και επιστρέφει αυτά τα δεδομένα.
Ροή ροής διακομιστή RPC
Διακομιστής ροής RPCs όπου ο πελάτης στέλνει ένα μόνο αίτημα στον διακομιστή και αναμένει πολλαπλές ή μια ροή απαντήσεων. Ο πελάτης διαβάζει από την επιστρεφόμενη ροή έως ότου δεν υπάρχουν άλλα μηνύματα.
Ένα παράδειγμα θα ήταν η ροή βίντεο, όπου ζητάτε να φορτώσετε ένα βίντεο και ο διακομιστής απαντά με τη ροή βίντεο.
Ροή πελάτη RPC
Ροές ροής πελάτη όπου ο πελάτης γράφει μια ακολουθία μηνυμάτων και τα στέλνει στο διακομιστή, χρησιμοποιώντας και πάλι μια παρεχόμενη ροή. Μόλις ολοκληρωθεί ο πελάτης να γράψει τα μηνύματα, περιμένει τον διακομιστή να τα διαβάσει και να επιστρέψει την απάντησή του.
Ένα παράδειγμα θα ήταν να μεταφορτώσετε ένα μεγάλο αρχείο στο διακομιστή και μόλις αποσταλούν όλα τα δεδομένα, ο πελάτης μπορεί να στείλει ένα τελικό μήνυμα για να υποδείξει ότι η μεταφόρτωση ολοκληρώνεται και ο διακομιστής μπορεί προαιρετικά να απαντήσει.
Requirectional stream rpc
Ένας συνδυασμός ροής πελάτη και διακομιστή. Μια εφαρμογή συνομιλίας ή ένα βιντεοπαιχνίδι για πολλούς παίκτες είναι ένα παράδειγμα όπου τα δεδομένα πρέπει να ρέουν μεταξύ του πελάτη και του διακομιστή ελεύθερα.
RPC ίδρυμα αμφίδρομης ροής όπου και οι δύο πλευρές στέλνουν μια ακολουθία μηνυμάτων χρησιμοποιώντας μια ροή ανάγνωσης-εγγραφής. Τα δύο ρεύματα λειτουργούν ανεξάρτητα, έτσι ώστε οι πελάτες και οι διακομιστές να μπορούν να διαβάζουν και να γράφουν με οποιαδήποτε σειρά τους αρέσει.
Σε μια αμφίδρομη ροή RPC, η κλήση ξεκινά από τον πελάτη που επικαλείται τη μέθοδο. Η επεξεργασία ροής πελάτη και διακομιστή είναι συγκεκριμένη για την εφαρμογή. Δεδομένου ότι τα δύο ρεύματα είναι ανεξάρτητα, ο πελάτης και ο διακομιστής μπορούν να διαβάσουν και να γράψουν μηνύματα με οποιαδήποτε σειρά.
Μικροεπιχειρήσεις
Ένα καλό παράδειγμα όπου το GRPC είναι ισχυρό είναι μέσα στο Microservices.
Σε αυτό το παράδειγμα, έχουμε γραμμένες μικροεπιχειρήσεις σε Python, Java και Golang. Αυτά πρέπει να στείλουν δεδομένα μεταξύ τους.
Χρήση HTTP/1.1 και το JSON θα σας ζητήσει να εφαρμόσετε τις συνδέσεις HTTP και τη σειριοποίηση για κάθε γλώσσα. Θα πρέπει επίσης να διασφαλίσετε ότι το σχήμα θα εφαρμοστεί σωστά για κάθε γλώσσα και εάν αλλάξει το API, όλες οι υπηρεσίες πρέπει να ενημερώνονται με το χέρι.
Το GRPC, από την άλλη πλευρά, χειρίζεται την εφαρμογή του HTTP/2.0 Πρωτόκολλο για εμάς. Γράφεται ένα μόνο σχήμα και ο αντίστοιχος κώδικας μπορεί να δημιουργηθεί για όλες τις γλώσσες που χρησιμοποιούνται. Αυτό το σχήμα μπορεί να θεωρηθεί ως σύμβαση που πρέπει να τηρούν όλες οι γλώσσες, καθιστώντας την επικοινωνία μεταξύ αυτών των υπηρεσιών πολύ πιο εύκολη και πιο αξιόπιστη.
απόδοση GRPC
Το GRPC είναι γρήγορο και είναι γενικά πολύ πιο εκτεταμένο από ένα ισοδύναμο ανάπαυσης:
- Τα ρυθμιστικά πρωτοκόλλου είναι σειριοποιημένα και αποστέλλονται ως Δυμάτια πάνω από το σύρμα, τα οποία είναι σημαντικά μικρότερα από τα κανονικά μηνύματα JSON.
- Το GRPC χρησιμοποιεί HTTP/2.0 που προσφέρει περαιτέρω βελτιώσεις
Το GRPC που συμπιέζει αποτελεσματικά τα δεδομένα που αποστέλλονται έχουν σημαντικό πλεονέκτημα, καθώς το μικρότερο μεταδιδόμενο ωφέλιμο φορτίο δεδομένων, τόσο λιγότερες εκδρομές TCP απαιτούνται. Η μέγιστη μονάδα μετάδοσης (MTU) είναι μια μέτρηση που αντιπροσωπεύει το μεγαλύτερο πακέτο δεδομένων που θα αποδεχθεί μια συσκευή συνδεδεμένη με το δίκτυο, η οποία είναι 1.500 bytes.
Η συμπίεση χειρίζεται για εσάς και επωφελείται απλά χρησιμοποιώντας το GRPC. Ως εναλλακτική λύση, είναι δυνατόν να χρησιμοποιήσετε κάτι σαν το GZIP για να συμπιέσετε μηνύματα JSON πριν στείλετε το κανονικό HTTP. Ωστόσο, αυτό μπορεί να είναι ενοχλητικό και προσθέτει ένα στρώμα πολυπλοκότητας. Διαφορετικές γλώσσες και περιβάλλοντα μπορεί επίσης να έχουν διαφορετικά επίπεδα υποστήριξης για το GZIP και άλλα ισοδύναμα εργαλεία συμπίεσης. Και για κάθε γλώσσα που χρησιμοποιείτε, θα χρειαστεί να επαναλάβετε τη σωστή λογική συμπίεσης και επικοινωνίας. Αυτό είναι ένα παρόμοιο πρόβλημα με αυτό που συζητήσαμε για τη βιβλιοθήκη HTTP.
Πότε πρέπει να χρησιμοποιήσετε το GRPC?
Αν εσύ’να χρησιμοποιούν πολλαπλές διαφορετικές γλώσσες προγραμματισμού που πρέπει να ενσωματωθούν σφιχτά μεταξύ τους και να απαιτούν γρήγορη και συχνή επικοινωνία που στέλνει πολλά δεδομένα, τότε το GRPC θα ήταν τέλειο.
- Με τη ροή GRPC, αυτό’S για τον προσδιορισμό της προόδου μεταφόρτωσης/λήψης εύκολα – χωρίς να χρειάζεται να υποβάλετε περιττά αιτήματα για ενημερώσεις.
- Το’είναι δυνατή η ακύρωση των αιτημάτων.
- Όλα τα οφέλη του HTTP/2.
- Εάν το GRPC υποστηρίζει τη γλώσσα σας, μην κάνετε’Δεν πρέπει να ανησυχείτε για εξωτερικές βιβλιοθήκες.
- Το GRPC δεν υποστηρίζει όλες τις γλώσσες.
- Το σχήμα μπορεί να αισθάνεται περιοριστικό και δυσκίνητο.
- Μπορεί να είναι περίπλοκο να ρυθμιστεί σε σύγκριση με το websockets.
- Ακόμα νέοι και τα σφάλματα μπορεί να είναι δύσκολο να εντοπίσουν σφάλματα.
- Η επικοινωνία με το GRPC δεν λειτουργεί εγγενώς από το κουτί με προγράμματα περιήγησης ιστού. Πρέπει να χρησιμοποιήσετε τη βιβλιοθήκη GRPC-WEB.
Webrtc
Το πρωτόκολλο WebRTC είναι ένα δωρεάν έργο ανοιχτού κώδικα που παρέχει δυνατότητες επικοινωνίας σε πραγματικό χρόνο (RTC) στην αίτησή σας που λειτουργεί πάνω από ένα ανοιχτό πρότυπο. Υποστηρίζει βίντεο, φωνή και γενικά δεδομένα που αποστέλλονται μεταξύ συνομηλίκων.
Η τεχνολογία είναι διαθέσιμη ως σύνολο API JavaScript για όλα τα μεγάλα προγράμματα περιήγησης και μια βιβλιοθήκη για εγγενείς πελάτες όπως το Android και το iOS Applications.
Το WebRTC είναι διαφορετικό από το WebSockets και το GRPC με θεμελιώδη τρόπο και αυτό είναι ότι μόλις δημιουργηθεί μια σύνδεση, τα δεδομένα μπορούν να μεταδοθούν (υπό ορισμένες περιπτώσεις) (υπό ορισμένες περιπτώσεις) μεταξύ των προγραμμάτων περιήγησης και των συσκευών σε πραγματικό χρόνο χωρίς να αγγίξουν τον διακομιστή.
Αυτό μειώνει την καθυστέρηση και κάνει το WebRTC εξαιρετικό για ήχο, βίντεο ή κοινή χρήση οθόνης – όπου η χαμηλή λανθάνουσα κατάσταση είναι σημαντική και πρέπει να σταλούν πολλά δεδομένα.
Κίνητρο WebRTC
Το WebRTC σκοπεύει να τυποποιήσει τον τρόπο με τον οποίο τα μέσα, όπως ο ήχος και το βίντεο, κοινοποιούνται πάνω από το καλώδιο-και για να το επιτύχουν βολικά με ένα απλό στη χρήση API.
Άλλες λύσεις, όπως το WebSockets, καθιστούν δυνατή τη μετάδοση οποιωνδήποτε δεδομένων μεταξύ δύο συνομηλίκων. Ωστόσο, αυτά τα δεδομένα πρέπει να μεταδοθούν μέσω ενός διακομιστή μεσολάβησης ή διακομιστή. Η βασιζόμενη σε έναν άλλο διακομιστή προσθέτει λανθάνουσα κατάσταση, καθώς όλα όσα αποστέλλονται μέσω αυτού πρέπει να εξεταστούν, να επεξεργαστούν και να αποκρυπτογραφηθούν. Υπάρχει ένας μεσαίος άνθρωπος μεταξύ των δύο συνομηλίκων. Για ροή βίντεο ή ακόμα και συνομιλία σε πραγματικό χρόνο, αυτή η καθυστέρηση είναι ανεπιθύμητη.
Τα προγράμματα περιήγησης είναι επίσης πιο ισχυρά από ό, τι πριν από λίγα χρόνια. Τα προγράμματα περιήγησης έχουν πρόσβαση στην κάμερα και το μικρόφωνο, απαιτώντας ένα ενσωματωμένο API και έναν εύκολο τρόπο μετάδοσης αυτών των πλούσιων πληροφοριών. Το WebRTC προορίζεται να απλοποιήσει αυτή τη διαδικασία και να εκθέσει ένα εύχρηστο API που είναι εφικτό σε προγράμματα περιήγησης.
Το πρόβλημα με το WebRTC
Το κίνητρο ορίζεται και φαίνεται ότι το WebRTC είναι μια μαγική λύση που επιτρέπει ταχύτερη επικοινωνία μεταξύ δύο συνομηλίκων. Αλλά δυστυχώς υπάρχουν μερικά προβλήματα.
Το πρώτο πρόβλημα είναι ότι η καθιέρωση μιας σύνδεσης από ομότιμους-peer δεν είναι απλή-το Διαδίκτυο είναι περίπλοκο και υπάρχουν πολλοί δρομολογητές, πληρεξούσιοι και τείχη μεταξύ της Αλίκης στην Καλιφόρνια και του Μπεν στη Νότια Αφρική. Και σε ορισμένες περιπτώσεις, μπορεί να μην είναι δυνατόν να υπάρχει άμεση γραμμή μεταξύ δύο συνομηλίκων. Μια σύνδεση μεταξύ δύο συνομηλίκων μπορεί να χρειαστεί να παρακάμψει ένα τείχος προστασίας που αποτρέπει τις ανοικτές συνδέσεις, θα μπορούσατε ενδεχομένως να μην έχετε δημόσια διεύθυνση IP ή ο δρομολογητής μπορεί να μην επιτρέψει άμεση σύνδεση μεταξύ των συνομηλίκων.
Το δεύτερο πρόβλημα είναι ότι πρέπει να υπάρχει ένας τρόπος για δύο συνομηλίκους να ανακαλύψουν ο ένας τον άλλον και να καθορίσουν τη βέλτιστη διαδρομή στην οποία μπορεί να συμβεί η επικοινωνία. Αυτό απαιτεί ορισμένες πληροφορίες που πρέπει να μοιραστούν μεταξύ των δύο πελατών πριν μπορέσουν να γνωρίζουν πώς να επικοινωνούν καλύτερα μεταξύ τους – και ένας κοινός τρόπος για να μοιραστείτε αυτές τις πληροφορίες είναι με τη χρήση websockets.
Που είναι λίγο αστείο. Ενα HTTP Η σύνδεση αναβαθμίζεται σε ένα Ιστοσελίδα σύνδεση μόνο για να μοιραστείτε πληροφορίες για τη δημιουργία α Webrtc σύνδεση.
Εάν θέλετε πραγματικά να εκτιμήσετε αυτό που κάνει το WebRTC και η πολυπλοκότητά του, θα πρέπει να εξοικειωθείτε με ορισμένους δυνητικά άγνωστους όρους: NAT, STUN, TRUN, ICE, SDP και σηματοδότηση.
Πώς λειτουργεί το WebRTC?
Στην παραπάνω επισκόπηση, περιγράψαμε το κίνητρο του WebRTC, το οποίο περιγράφει τη βασική ιδέα για το πώς λειτουργεί. Αυτή η ενότητα θα βουτήξει σε μερικά από τα θέματα χαμηλότερου επιπέδου που πρέπει να καταλάβετε για να κατανοήσετε πλήρως το WebRTC.
Μετάφραση διεύθυνσης δικτύου (NAT)
Η κατανόηση του τι είναι το NAT και πώς λειτουργεί είναι απαραίτητη για την κατανόηση του WebRTC.
Ένα NAT χρησιμοποιείται για να δώσει στη συσκευή σας (φορητό υπολογιστή ή κινητό τηλέφωνο) μια δημόσια διεύθυνση IP. Αυτό είναι σημαντικό επειδή θέλουμε να δημιουργήσουμε μια σύνδεση μεταξύ δύο συνομηλίκων που είναι πιθανώς και οι δύο πίσω από έναν δρομολογητή. Ένας δρομολογητής θα έχει δημόσια διεύθυνση IP και κάθε συσκευή που είναι συνδεδεμένη με τον δρομολογητή θα έχει ιδιωτική διεύθυνση IP.
Αυτές οι συσκευές δεν είναι’t απευθείας εκτεθειμένο στο Διαδίκτυο. Αντ ‘αυτού, όλη η κυκλοφορία περνάει από το δρομολογητή, ο οποίος επικοινωνεί με τον έξω κόσμο. Όταν ζητάτε πόρους από απομακρυσμένο διακομιστή, ο δρομολογητής είναι υπεύθυνος για “δρομολόγηση” Το αίτημα από το τοπικό σας μηχάνημα σε αυτόν τον διακομιστή και τη δρομολόγηση της απάντησης από το διακομιστή πίσω στο τοπικό σας μηχάνημα.
Αυτά τα αιτήματα μεταφράζονται από τη συσκευή’s ιδιωτική διεύθυνση IP στον δρομολογητή’S Public IP με μια μοναδική θύρα – η οποία στη συνέχεια αποθηκεύεται σε πίνακα NAT. Με αυτόν τον τρόπο, η κατοχή ενός μοναδικού δημόσιου IP για κάθε συσκευή σε ένα τοπικό δίκτυο δεν είναι απαραίτητη.
Η παραπάνω εικόνα είναι ένα απλουστευτικό παράδειγμα του τι θα μοιάζει με ένα τραπέζι NAT. Αφήνω’να προσποιηθεί την τοπική συσκευή, με ιδιωτική IP του 192.168.1.50, ζητά τη δημόσια διεύθυνση 82.88.31.26:80 για μερικά δεδομένα.
Αυτό επιτυγχάνεται από την τοπική συσκευή που στέλνει πρώτα το αίτημα στον δρομολογητή, το οποίο δρομολογεί το αίτημα στην απομακρυσμένη συσκευή. Στη συνέχεια, ο δρομολογητής λέει στην απομακρυσμένη συσκευή να στείλει την απάντηση στην εξωτερική του διεύθυνση IP, με μια μοναδική θύρα, η οποία σε αυτό το παράδειγμα είναι 86.88.71.25: 8830.
Αυτή η μοναδική θύρα είναι σημαντική καθώς θα επιτρέψει στον δρομολογητή να καθορίσει ποια τοπική συσκευή έκανε το αίτημα. Όλες αυτές οι πληροφορίες αποθηκεύονται σε έναν πίνακα NAT. Μόλις ο δρομολογητής λάβει την απάντηση, μπορεί να εκτελέσει μια αναζήτηση και να αποφασίσει σε ποια τοπική συσκευή πρέπει να προωθηθεί η απάντηση.
Αυτό είναι πολύ απλό στην κατανόηση όταν έχουμε ένα κανονικό ζεύγος αιτήματος/απάντησης – μία συσκευή και έναν διακομιστή. Αλλά τι συμβαίνει εάν μια άλλη εξωτερική συσκευή με μια εντελώς διαφορετική διεύθυνση IP αποφασίσει να στείλει πακέτα στην εξωτερική διεύθυνση IP του δρομολογητή στην ίδια θύρα που χρησιμοποιήθηκε προηγουμένως? Σε περίπτωση που ο δρομολογητής προωθήσει την τοπική συσκευή που έχει χαρτογραφηθεί στον αριθμό θύρας?
Αυτή η απόφαση εξαρτάται από το ποια μετάφραση NAT που χρησιμοποιεί ο δρομολογητής και τελικά καθορίζει εάν μπορεί να δημιουργηθεί μια σύνδεση από ομοτίμους με peer. Ανάλογα με τον δρομολογητή που χρησιμοποιείτε, θα εφαρμόσει μια διαφορετική μετάφραση NAT. Υπάρχουν τέσσερις διαφορετικές μέθοδοι μετάφρασης NAT:
- One-to-one nat
- Διεύθυνση περιορισμένη NAT
- Περιορισμένη θύρα NAT
- Συμμετρικός NAT
One-to-one nat: Χάρτες μια εξωτερική διεύθυνση IP και θύρα (συνήθως δημόσια) σε μια εσωτερική διεύθυνση IP και θύρα (συνήθως ιδιωτική). Στο παραπάνω παράδειγμα, εάν ο δρομολογητής λάβει απάντηση στη θύρα 8830 και εξωτερική IP 86.88.71.25, Θα το διαβιβάσει στην τοπική συσκευή 192.168.1.50, καθώς αυτή είναι η τοπική συσκευή που έκανε το αίτημα (πληροφορίες που ανακτήθηκαν από τον πίνακα NAT). Ο δρομολογητής δεν ενδιαφέρεται για τον προορισμό IP ή από πού προέρχεται η απόκριση. Αν αυτο’σε μια συγκεκριμένη εξωτερική θύρα πηγαίνει σε αυτήν την τοπική συσκευή.
Διεύθυνση περιορισμένη NAT: Μια απομακρυσμένη συσκευή μπορεί να στείλει ένα πακέτο στην τοπική συσκευή μόνο εάν η τοπική συσκευή είχε στείλει προηγουμένως ένα πακέτο στη διεύθυνση απομακρυσμένης διεύθυνσης IP. Συνοπτικά, το επιτρέπουμε μόνο αν επικοινωνήσαμε με αυτόν τον οικοδεσπότη πριν. Στο παραπάνω παράδειγμα, επιτρέψτε μόνο τα πακέτα από 86.88.71.25.
Περιορισμένη θύρα NAT: Το ίδιο με τη διεύθυνση που περιορίζεται στο NAT, αλλά ο περιορισμός περιλαμβάνει επίσης αριθμούς θύρας. Η απομακρυσμένη συσκευή μπορεί να στείλει μόνο ένα πακέτο στην εσωτερική συσκευή εάν η εσωτερική συσκευή είχε στείλει προηγουμένως ένα πακέτο στη διεύθυνση IP x και τη θύρα p. Στο παραπάνω παράδειγμα, επιτρέπεται μόνο από 86.88.71.25 και λιμάνι 80.
Συμμετρικός NAT: Το πιο περιοριστικό. Για αυτό το εξωτερική IP, εξωτερική θύρα, προορισμός IP, και λιμάνι προορισμού Όλοι πρέπει να ταιριάζουν με αυτό που υπάρχει στον πίνακα NAT. Αυτό σημαίνει ότι τα πακέτα μπορούν να σταλούν μόνο σε μια συγκεκριμένη θύρα μιας τοπικής συσκευής, εάν αυτή η συσκευή ήταν αυτή που ζήτησε την IP και τη θύρα προορισμού.
Το WebRTC δεν λειτουργεί πάνω από συμμετρικό NAT και για να καταλάβει γιατί πρέπει να καταλάβουμε τι είναι ένας διακομιστής αναισθητοποίησης.
Συνεδρία Traversal Utilities για NAT (STUN)
Το Stun είναι ένα πρωτόκολλο για να σας πω τη δημόσια διεύθυνση IP/Port μέσω NAT και να καθορίσετε τυχόν περιορισμούς στο δρομολογητή σας που θα εμπόδιζε μια άμεση σύνδεση με έναν ομότιμο. Ένας διακομιστής αναισθητοποίησης είναι ένας μηχανισμός για τους πελάτες να ανακαλύψουν την παρουσία ενός NAT, καθώς και τον τύπο της NAT, και να καθορίσουν την εξωτερική διεύθυνση IP και τη χαρτογράφηση των θυρών του NAT.
Ο σκοπός ενός αιτήματος αναισθητοποίησης είναι να προσδιορίσετε τη δημόσια παρουσία σας, έτσι ώστε αυτή η δημόσια παρουσία να μπορεί στη συνέχεια να μεταδοθεί με κάποιον άλλο, ώστε να μπορούν να συνδεθούν μαζί σας – αυτή η επικοινωνία αναφέρεται ως σηματοδότηση, την οποία θα συζητήσουμε περισσότερο αργότερα.
Λειτουργεί για ένα προς ένα, Προσαρμογή περιορισμένου, και Περιορισμένη θύρα NAT. Αλλά δεν λειτουργεί για συμμετρικός NAT. Επειδή όταν ζητάτε το διακομιστή αναισθητοποίησης για τα δημόσια στοιχεία σας, το ζεύγος επικοινωνίας δημιουργήθηκε ειδικά για τον πελάτη που υποβάλλει το αίτημα. Δεν είναι δυνατόν να εμπλακεί ένας άλλος ομότιμος χρησιμοποιώντας συμμετρική NAT – η επικοινωνία πάνω από τη θύρα της τοπικής συσκευής περιορίζεται στον διακομιστή αναισθητοποίησης.
Οι διακομιστές αναισθητοποίησης είναι ελαφρύς και φθηνός για να διατηρηθούν. Υπάρχουν δημόσιοι διακομιστές αναισθητοποίησης που μπορούν να ερωτηθούν δωρεάν.
Η παρακάτω εικόνα απεικονίζει όταν λειτουργεί η αναισθητοποίηση και όταν μπορεί να δημιουργηθεί μια σύνδεση από ομοτίμους με peer-peer.
Από την άλλη πλευρά, εάν δεν μπορεί να καθοριστεί μια σύνδεση από ομοτίμους, για παράδειγμα, όταν ένας ομότιμος είναι πίσω από ένα συμμετρικό NAT-τότε η τελική σύνδεση στο τρίτο βήμα δεν θα επιτρέπεται. Καθώς η αρχική σύνδεση δημιουργήθηκε με τον διακομιστή αναισθητοποίησης και κανένας άλλος ομότιμος δεν μπορεί να χρησιμοποιήσει αυτές τις πληροφορίες σύνδεσης.
Σε μια περίπτωση όπως αυτό, όπου μια άμεση σύνδεση δεν μπορεί να καθοριστεί, πρέπει να χρησιμοποιήσουμε έναν διακομιστή Turn.
Μεταφορά χρησιμοποιώντας ρελέ γύρω από το NAT (στροφή)
Το Turn είναι ένα πρωτόκολλο για την αναμετάδοση της κυκλοφορίας δικτύου όταν μια άμεση σύνδεση δεν μπορεί να δημιουργηθεί μεταξύ δύο συνομηλίκων. Για παράδειγμα, εάν ένας ομότιμος είναι πίσω από ένα συμμετρικό NAT, απαιτείται ειδικός διακομιστής για να μεταδώσει την κυκλοφορία μεταξύ των συνομηλίκων. Σε αυτή την περίπτωση, θα δημιουργήσατε μια σύνδεση με έναν διακομιστή Turn και θα πείτε σε όλους τους συνομηλίκους να στείλετε πακέτα στο διακομιστή, τα οποία στη συνέχεια θα σας διαβιβαστούν.
Αυτό έρχεται με γενικά έξοδα και ένας διακομιστής στροφής μπορεί να είναι ακριβός για συντήρηση και εκτέλεση.
Η παρακάτω εικόνα απεικονίζει τον τρόπο με τον οποίο χρησιμοποιείται ένας διακομιστής Turn για να αναμεταδίδει μηνύματα μεταξύ δύο ή περισσότερων συνομηλίκων.
Διαδραστική ίδρυση συνδεσιμότητας (ICE)
Το ICE χρησιμοποιεί ένα συνδυασμό των πρωτοκόλλων αναισθητοποίησης και στροφής για να παρέχει έναν μηχανισμό για τους ξενιστές για να ανακαλύψουν τις δημόσιες διευθύνσεις IP του άλλου και να δημιουργήσουν άμεση σύνδεση. Εάν μια άμεση σύνδεση είναι αδύνατη, ο ICE θα χρησιμοποιήσει στροφή για να δημιουργήσει μια σύνδεση αναμετάδοσης μεταξύ των δύο κεντρικών υπολογιστών.
Όλοι αυτοί οι πιθανοί τρόποι δημιουργίας μιας σύνδεσης ονομάζονται υποψήφιοι πάγου. Όλες οι συλλεγόμενες διευθύνσεις αποστέλλονται στον απομακρυσμένο ομότιμο μέσω του SDP, το οποίο θα εξερευνήσουμε στη συνέχεια. Το WebRTC χρησιμοποιεί αυτές τις πληροφορίες σε κάθε πελάτη για να καθορίσει τον καλύτερο τρόπο σύνδεσης με έναν άλλο ομότιμο. Μπορεί να είναι ότι και οι δύο συνομηλίκοι βρίσκονται στο ίδιο NAT και ότι μπορεί να δημιουργηθεί μια τοπική σύνδεση, ή ίσως και οι δύο συνομηλίκοι πίσω από συμμετρικό NAT και απαιτούν ένα ρελέ χρησιμοποιώντας διακομιστή Turn.
Πρωτόκολλο περιγραφής συνεδρίας (SDP)
Το SDP είναι ουσιαστικά μια μορφή δεδομένων για την περιγραφή των συνεδριών μέσων ενημέρωσης για την ανακοίνωση συνεδρίας, την πρόσκληση συνεδρίας και άλλες μορφές εκκίνησης της περιόδου σύνδεσης. Είναι ένα πρότυπο για την περιγραφή του περιεχομένου πολυμέσων για τη σύνδεση, όπως η ανάλυση, οι μορφές, οι κωδικοποιητές και η κρυπτογράφηση.
Είναι σημαντικό’S χρησιμοποιείται επίσης για να περιγράψει τους υποψηφίους πάγου και άλλες επιλογές δικτύωσης. Όταν ο Peer A θέλει να συνδεθεί με το Peer B, πρέπει να μοιραστούν πληροφορίες SDP για σύνδεση. Ο τρόπος με τον οποίο μοιράζεται αυτό το SDP είναι εξ ολοκλήρου – αυτό αναφέρεται ως σηματοδότηση και θα το εξερευνήσουμε στη συνέχεια.
Σηματοδότηση – καθιέρωση σύνδεσης
Η σηματοδότηση είναι η διαδικασία αποστολής πληροφοριών ελέγχου μεταξύ δύο συσκευών για τον προσδιορισμό των πρωτοκόλλων επικοινωνίας, των καναλιών, των κωδικοποιητών και των μορφών μέσων και της μεθόδου μεταφοράς δεδομένων, καθώς και των απαιτούμενων πληροφοριών δρομολόγησης. Το πιο σημαντικό πράγμα που πρέπει να γνωρίζουμε για τη διαδικασία σηματοδότησης για το WebRTC: δεν ορίζεται στις προδιαγραφές.
Οι συνδέσεις ομοτίμων ασχολούνται με τη σύνδεση δύο εφαρμογών σε διαφορετικούς υπολογιστές. Μια σύνδεση δημιουργείται μέσω μιας διαδικασίας ανακάλυψης και διαπραγμάτευσης που ονομάζεται σηματοδότηση.
Μια σημαντική προειδοποίηση είναι ότι το WebRTC δεν έχει ενσωματωμένη σηματοδότηση ως μέρος της προδιαγραφής, καθώς δεν είναι δυνατό για δύο συσκευές να επικοινωνούν άμεσα μεταξύ τους, τις οποίες διερευνήσαμε λεπτομερώς νωρίτερα. Για δύο συνομηλίκους να συνδεθούν χρησιμοποιώντας το WebRTC, απαιτούν δεδομένα SDP του άλλου.
Ως εκ τούτου, εξαρτάται από εσάς, ως προγραμματιστής, να δημιουργήσετε έναν τρόπο για δύο συσκευές να μοιραστούν αυτές τις πληροφορίες. Μια δημοφιλής επιλογή είναι το WebSockets ή οι πληροφορίες σηματοδότησης μπορούν να σταλούν εμπρός και πίσω μέσω ηλεκτρονικού ταχυδρομείου ή να παραδοθούν με τα πόδια και να εισέλθουν με το χέρι για να δημιουργήσουν μια σύνδεση.
Μόλις μοιραστούν αυτές οι πληροφορίες, έχετε όλα όσα χρειάζεστε για δύο συνομηλίκους για να δημιουργήσετε μια σύνδεση WebRTC, μπορεί να είναι μια άμεση σύνδεση ή μπορεί να είναι μέσω ενός διακομιστή Turn.
Πότε πρέπει να χρησιμοποιήσετε το WebRTC?
Μπορείτε ακόμη να ρωτήσετε: Γιατί πρέπει να χρησιμοποιήσω το WebRTC? Φαίνεται περίπλοκο να κατανοήσουμε και ακόμη πιο περίπλοκο.
Είναι περίπλοκο να δημιουργηθεί, αλλά υπάρχουν πολλά οφέλη:
- Το API είναι εύκολο στη χρήση και είναι διαθέσιμο απευθείας στο πρόγραμμα περιήγησής σας.
- Έχει καλή απόδοση, καθιστώντας δυνατή τη μετάδοση περιεχομένου υψηλού εύρους ζώνης, όπως βίντεο ή ήχο.
- Τα πιο προηγμένα χαρακτηριστικά, όπως η κοινή χρήση οθόνης και η κοινή χρήση αρχείων, μπορούν εύκολα να εφαρμοστούν.
- Υποστηρίζει σύνδεση από ομοτίμους με μειωμένη λανθάνουσα κατάσταση.
- Δωρεάν και ανοιχτή πηγή.
- Χωρίς ενσωματωμένη σηματοδότηση.
- Πρέπει να διατηρήσετε διακομιστές αναισθητοποίησης και στροφής.
- Για ομαδικές συνδέσεις (όπως μια ομαδική βιντεοκλήση) μπορεί να χρειαστεί SFU.
- Περίπλοκο για τη ρύθμιση και την κατανόηση.
Ποιο θα πρέπει να επιλέξετε?
Το πρωτόκολλο που επιλέγετε θα εξαρτηθεί από τις συγκεκριμένες ανάγκες σας.
HTTP: Με το HTTP/2, είναι πλέον δυνατό να υπάρχει αμφίδρομη επικοινωνία μεταξύ ενός πελάτη και ενός διακομιστή. Ανάλογα με την αίτησή σας, μπορεί να μην χρειάζεστε πλήρη επικοινωνία διπλής όψης και κάτι σαν το SSE θα είναι περισσότερο από αρκετό. Ανακαλύψαμε επίσης σε αυτό το άρθρο ότι οι WebSockets και το GRPC εξαρτώνται από το HTTP, ενώ το WebRTC απαιτεί κάποιο άλλο κανάλι για σηματοδότηση. Το’Αξίζει να εξερευνήσετε πρώτα εάν το HTTP επιλύει τις ανάγκες της αίτησής σας πριν από την ανίχνευση σε αυτά τα άλλα πρωτόκολλα.
Websockets είναι τα καλύτερα κατάλληλα για εφαρμογές σε πραγματικό χρόνο που χρειάζονται αμφίδρομη επικοινωνία, όπως εφαρμογές συνομιλίας. Είναι επίσης σχετικά εύκολο να δημιουργηθούν και να χρησιμοποιηθούν. Ωστόσο, οι WebSockets δεν είναι τόσο αποτελεσματικές όσο το GRPC ή το WebRTC και δεν είναι κατάλληλες για εφαρμογές που πρέπει να στείλουν πολλά δεδομένα.
GRPC είναι ένα πιο αποτελεσματικό πρωτόκολλο από το WebSockets και είναι καλύτερα κατάλληλο για εφαρμογές που πρέπει να στείλουν πολλά δεδομένα. Ωστόσο, το GRPC είναι πιο περίπλοκο για τη ρύθμιση και τη χρήση από ό, τι οι websockets. Εάν πρέπει να κάνετε πολλές μικρές κλήσεις API, το GRPC είναι μια καλή επιλογή. Ή, όταν εφαρμόζετε μικροεπιχειρήσεις με διάφορες γλώσσες προγραμματισμού που πρέπει να επικοινωνούν, τότε GRPC’S σειριοποιημένα δομημένα δεδομένα και η δημιουργία κώδικα θα σας εξοικονομήσει πολύ χρόνο. Το’αξίζει επίσης να σημειωθεί ότι μπορείτε’t Χρησιμοποιήστε εύκολα το GRPC από το πρόγραμμα περιήγησης. Για αυτό, χρειάζεστε ένα ειδικό πληρεξούσιο στο backend σας που μεταφράζει τις κλήσεις – δείτε το GRPC -WEB.
Webrtc είναι το πιο αποτελεσματικό πρωτόκολλο για επικοινωνία σε πραγματικό χρόνο με χαμηλή καθυστέρηση μεταξύ προγραμμάτων περιήγησης και συσκευών και είναι κατάλληλη για εφαρμογές που πρέπει να στείλουν πολλά δεδομένα. Το WebRTC παρέχει επίσης ένα εύχρηστο API που είναι απευθείας διαθέσιμο στο πρόγραμμα περιήγησης, καθιστώντας εύκολο να μοιραστείτε την κάμερα, τον ήχο, την οθόνη ή άλλα αρχεία. Ωστόσο, το WebRTC μπορεί να είναι περίπλοκο για τη ρύθμιση και τη χρήση, καθώς απαιτεί να εκτελέσετε τη σηματοδότηση και τη διατήρηση ενός διακομιστή στροφής και αναισθητοποίησης.
συμπέρασμα
Το μέλλον θα δει περισσότερα πρωτόκολλα, αλλαγές και περαιτέρω βελτιώσεις. Το HTTP/3 έχει ήδη κυκλοφορήσει και υπάρχει επίσης ένα νέο πρωτόκολλο επικοινωνίας που ονομάζεται WebTransport, πιθανή αντικατάσταση για το WebSockets.
Ελπίζουμε να βρείτε αυτό το άρθρο χρήσιμο και ότι θα σας βοηθήσει να λάβετε τεκμηριωμένη απόφαση. Εάν θέλετε να συνεχίσετε τη συζήτηση, επικοινωνήστε μαζί μας στο Twitter ή στο LinkedIn.
WebRTC VS HLS: Σύγκριση μεταξύ πρωτοκόλλων ροής
Αυτή η ανάρτηση ιστολογίου συγκρίνει το WebRTC και το HLS, δύο από τα πιο δημοφιλή πρωτόκολλα streaming. Εξετάζει τα πλεονεκτήματα και τα μειονεκτήματα κάθε πρωτοκόλλου και διερευνά τις εφαρμογές του. Επιπλέον, η θέση παρέχει μια επισκόπηση της οποίας είναι καλύτερη για τη ροή, επιτρέποντας στους αναγνώστες να επιλέξουν τη σωστή τεχνολογία για τις ανάγκες τους.
Ashik TS
22 Φεβρουαρίου 2023
Στη σημερινή ψηφιακή εποχή, τα πρωτόκολλα streaming έχουν γίνει απαραίτητα για την κατανάλωση και την ανταλλαγή μέσων. Από ζωντανές ροές σε βίντεο κατόπιν ζήτησης, τα πρωτόκολλα streaming μας επέτρεψαν να έχουμε πρόσβαση σε περιεχόμενο οπουδήποτε, οποτεδήποτε. Αλλά με τόσες διαθέσιμες επιλογές, γνωρίζοντας ποια είναι η καλύτερη για τις ανάγκες σας μπορεί να πάρει χρόνο και προσπάθεια. Σε αυτό το άρθρο, θα εξετάσουμε δύο από τα πιο δημοφιλή πρωτόκολλα streaming: WebRTC και HLS, τα συγκρίνουμε και θα σας βοηθήσουμε να λάβετε τεκμηριωμένη απόφαση.
Τι είναι το webrtc?
Το WebRTC είναι ένα ελεύθερο και ανοιχτό πρωτόκολλο που αναπτύχθηκε από το W3C. Επιτρέπει την επικοινωνία σε πραγματικό χρόνο, όπως φωνητικές και βιντεοκλήσεις, διαδικτυακές διασκέψεις και συνομιλία. Το WebRTC έχει γίνει εμφανές πρόσφατα λόγω της ικανότητάς του να παρέχει ροές βίντεο και ήχου υψηλής ποιότητας, υψηλής ποιότητας.
Εφαρμογές του WebRTC
Εδώ είναι μερικές από τις πιο συχνά χρησιμοποιούμενες περιπτώσεις χρήσης του WebRTC:
- Φωνητικές και βιντεοκλήσεις: Μία από τις πιο δημοφιλείς περιπτώσεις χρήσης για το WebRTC είναι η φωνή και οι βίντεο κλήσεις. Επιτρέπει επικοινωνία σε πραγματικό χρόνο, χαμηλής καθυστέρησης μεταξύ δύο ή περισσότερων ατόμων. Οι επιχειρήσεις χρησιμοποιούν ευρέως αυτό το χαρακτηριστικό για την εσωτερική επικοινωνία, τη συνεργασία και τις εφαρμογές που βλέπουν τους καταναλωτές για κοινωνική δικτύωση και online χρονολόγηση.
- Online διασκέψεις: Μια άλλη δημοφιλής περίπτωση χρήσης για το WebRTC είναι η διαδικτυακή διάσκεψη. Δίνει τη δυνατότητα σε πολλούς χρήστες να συμμετέχουν σε μια εικονική αίθουσα συσκέψεων και να αλληλεπιδρούν μεταξύ τους μέσω βίντεο και ήχου, καθώς και οθόνες και έγγραφα κοινής χρήσης. Οι επιχειρήσεις χρησιμοποιούν ευρέως αυτό το χαρακτηριστικό για απομακρυσμένες συναντήσεις και παρουσιάσεις, καθώς και για εκπαιδευτικά ιδρύματα για online μαθήματα και διαλέξεις.
- Κουβέντα: Το WebRTC επιτρέπει επίσης την επικοινωνία με βάση το κείμενο σε πραγματικό χρόνο μέσω της συνομιλίας. Αυτή η λειτουργία μπορεί να ενσωματωθεί σε διάφορες εφαρμογές και πλατφόρμες, όπως η κοινωνική δικτύωση, το online gaming και η υποστήριξη πελατών. Επιτρέπει άμεση επικοινωνία και μπορεί να χρησιμοποιηθεί για την ενίσχυση της εμπειρίας του χρήστη σε διάφορα πλαίσια.
Τι είναι το HLS?
Το HLS (HTTP Live Streaming) είναι ένα προσαρμοστικό πρωτόκολλο ροής bitrate που αναπτύχθηκε από την Apple. Χρησιμοποιείται ευρέως για ζωντανή ροή σε κινητές συσκευές και προγράμματα περιήγησης επιφάνειας εργασίας. Το HLS έχει σχεδιαστεί για να λειτουργεί με το πρωτόκολλο HTTP και μπορεί εύκολα να ενσωματωθεί στην υπάρχουσα υποδομή που βασίζεται σε HTTP.
Εφαρμογές του HLS
Εδώ είναι μερικοί από τους πιο συνηθισμένους τρόπους που χρησιμοποιείται το HLS στη σημερινή εποχή:
- Ζωντανή μετάδοση: Το HLS χρησιμοποιείται ευρέως για συμβάντα ζωντανής ροής, όπως αθλητικές, συναυλίες και εκπομπές ειδήσεων. Το πρωτόκολλο έχει σχεδιαστεί για να χειρίζεται υψηλή κυκλοφορία και να παρέχει μια ομαλή εμπειρία ροής για τους θεατές. Η προσαρμοστική λειτουργία Bitrate επιτρέπει στη ρεύμα να προσαρμοστεί στη σύνδεση στο Διαδίκτυο του θεατή, παρέχοντας μια καλύτερη εμπειρία προβολής.
- Video-on-Demand (VOD): Το HLS χρησιμοποιείται επίσης συνήθως για περιεχόμενο βίντεο σε απαίτηση (VOD), όπως ταινίες, τηλεοπτικές εκπομπές και σεμινάρια βίντεο. Το πρωτόκολλο επιτρέπει την εύκολη ενσωμάτωση με τα συστήματα διαχείρισης περιεχομένου και μια ομαλή εμπειρία ροής για τον θεατή με προσαρμοστική Bitrate.
- IPTV και OTT: Το HLS χρησιμοποιείται επίσης σε υπηρεσίες IPTV και over-the-top (OTT), όπως η ροή τηλεοπτικών και υπηρεσιών βίντεο. Η ικανότητα του πρωτοκόλλου να χειρίζεται υψηλή κυκλοφορία και να παρέχει μια ομαλή εμπειρία ροής καθιστά μια δημοφιλής επιλογή για αυτές τις εφαρμογές.
- Κινητό streaming: Το HLS είναι επίσης δημοφιλές για κινητά streaming καθώς υποστηρίζεται τόσο σε iOS όσο και σε πλατφόρμες Android.
- Επιχειρηματικές Επικοινωνίες: Το HLS χρησιμοποιείται σε πλατφόρμες επικοινωνίας επιχειρήσεων που επιτρέπουν στους υπαλλήλους να μεταδίδουν βίντεο, να μοιράζονται οθόνες και να κάνουν κλήσεις ήχου/βίντεο, καθώς παρέχει μια ομαλή εμπειρία ροής και είναι συμβατή με τις περισσότερες συσκευές.
WebRTC VS HLS: Μια λεπτομερής σύγκριση
χαρακτηριστικό | Webrtc | HLS |
---|---|---|
Υποστήριξη προγράμματος περιήγησης | Chrome, Firefox, Safari, Edge (με plugin) | Safari, Chrome, Edge, Firefox (με plugin) |
Υποστήριξη συσκευών | Windows, MacOS, Linux, iOS, Android | iOS, Android, MacOS, Windows |
Υποστήριξη κωδικοποιητή | VP8, VP9, Η.264, h.265 | H.264, h.265 |
Αφάνεια | Χαμηλός | Υψηλός |
Ασφάλεια | Υψηλός | Μεσαίο |
Ποιότητα βίντεο | Υψηλός | Υψηλός |
Μέθοδος παράδοσης | Ομότιμος | Με βάση το διακομιστή |
Επεκτασιμότητα | Υψηλός | Υψηλός |
Συμβατότητα | Περιορισμένος | Πλατύς |
Όταν αποφασίζουμε ποιο πρωτόκολλο θα χρησιμοποιηθεί, είναι σημαντικό να εξεταστούν παράγοντες όπως η καθυστέρηση, η ασφάλεια, η ποιότητα του βίντεο, η μέθοδος παράδοσης, η επεκτασιμότητα και η συμβατότητα.
Αφάνεια
Όταν πρόκειται για λανθάνουσα κατάσταση, το WebRTC έχει ένα σαφές πλεονέκτημα έναντι του HLS. Το WebRTC χρησιμοποιεί επικοινωνία σε πραγματικό χρόνο, που σημαίνει ότι το βίντεο παραδίδεται αμέσως στον θεατή. Από την άλλη πλευρά, το HLS χρησιμοποιεί έναν μηχανισμό buffering, ο οποίος καθυστερεί την παράδοση βίντεο. Ανάλογα με τις συνθήκες του δικτύου, αυτή η καθυστέρηση μπορεί να είναι οπουδήποτε από μερικά δευτερόλεπτα έως μερικά λεπτά. Αυτά τα στοιχεία καθιστούν το WebRTC πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν χαμηλή λανθάνουσα κατάσταση, όπως ζωντανές συνομιλίες βίντεο και online gaming.
Ασφάλεια
Τόσο το WebRTC όσο και το HLS χρησιμοποιούν κρυπτογράφηση για να εξασφαλίσουν ροές βίντεο. Ωστόσο, το επίπεδο ασφάλειας που παρέχεται από κάθε πρωτόκολλο είναι διαφορετικό. Το WebRTC χρησιμοποιεί το ασφαλές πρωτόκολλο μεταφοράς σε πραγματικό χρόνο (SRTP) για να κρυπτογραφήσει τη ροή βίντεο, το οποίο θεωρείται μία από τις πιο ασφαλείς μεθόδους κρυπτογράφησης. Από την άλλη πλευρά, το HLS χρησιμοποιεί το πρωτόκολλο HTTP Secure (HTTPS) για να κρυπτογραφήσει τη ροή βίντεο. Ενώ το HTTPS θεωρείται ασφαλές, το SRTP είναι λιγότερο ασφαλές. Λόγω αυτών των λόγων, το WebRTC είναι πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν υψηλά επίπεδα ασφάλειας, όπως οι οικονομικές συναλλαγές και η κυβερνητική επικοινωνία.
Ποιότητα βίντεο
Τόσο το WebRTC όσο και το HLS είναι σε θέση να παρέχουν βίντεο υψηλής ποιότητας. Ωστόσο, η ποιότητα βίντεο που παρέχεται από κάθε πρωτόκολλο μπορεί να ποικίλει ανάλογα με τις συνθήκες του δικτύου. Το WebRTC χρησιμοποιεί προσαρμοστική ροή bitrate, η οποία προσαρμόζει την ποιότητα του βίντεο σε πραγματικό χρόνο με βάση τις συνθήκες δικτύου του θεατή. Αυτό σημαίνει ότι η ποιότητα του βίντεο θα είναι υψηλή ακόμη και σε δίκτυα χαμηλού εύρους ζώνης. Από την άλλη πλευρά, το HLS χρησιμοποιεί έναν προ-διαχωρισμένο μηχανισμό παράδοσης βίντεο, ο οποίος μπορεί να οδηγήσει σε ρυθμίσεις και τραύλισμα σε δίκτυα χαμηλού εύρους ζώνης. Ως αποτέλεσμα, το WebRTC είναι πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν βίντεο υψηλής ποιότητας σε δίκτυα χαμηλού εύρους ζώνης.
Μέθοδος παράδοσης
Το WebRTC και το HLS χρησιμοποιούν διαφορετικές μεθόδους παράδοσης για τη ροή βίντεο. Το WebRTC χρησιμοποιεί μια μέθοδο παράδοσης από ομότιμους (P2P), πράγμα που σημαίνει ότι το βίντεο παραδίδεται απευθείας από το ένα θεατή σε άλλο. Αυτό μειώνει το φορτίο του διακομιστή και αυξάνει την επεκτασιμότητα της ροής βίντεο. Από την άλλη πλευρά, το HLS χρησιμοποιεί μια μέθοδο παράδοσης-διακομιστή πελάτη, πράγμα που σημαίνει ότι το βίντεο παραδίδεται από το διακομιστή στον θεατή. Αυτό μπορεί να οδηγήσει σε ζητήματα επεκτασιμότητας, ειδικά κατά τη διάρκεια των κορυφαίων χρόνων κυκλοφορίας. Ως αποτέλεσμα, το WebRTC είναι πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν υψηλές μεταβολές, όπως ζωντανές εκδηλώσεις και online gaming.
Επεκτασιμότητα
Το WebRTC και το HLS έχουν διαφορετικά χαρακτηριστικά κλιμάκωσης. Το WebRTC χρησιμοποιεί μια μέθοδο παράδοσης P2P, η οποία μειώνει το φορτίο του διακομιστή και αυξάνει την επεκτασιμότητα της ροής βίντεο. Από την άλλη πλευρά, το HLS χρησιμοποιεί μια μέθοδο παράδοσης πελάτη-διακομιστή, η οποία μπορεί να οδηγήσει σε προβλήματα κλιμάκωσης, ειδικά κατά τη διάρκεια των χρόνων κυκλοφορίας αιχμής. Ως αποτέλεσμα, το WebRTC είναι πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν υψηλές μεταβολές, όπως ζωντανές εκδηλώσεις και online gaming.
Συμβατότητα
Το WebRTC και το HLS έχουν διαφορετικά χαρακτηριστικά συμβατότητας. Το WebRTC είναι συμβατό με τα περισσότερα σύγχρονα προγράμματα περιήγησης, συμπεριλαμβανομένων των Chrome, Firefox και Safari. Ωστόσο, δεν είναι συμβατό με τον Internet Explorer and Edge. Από την άλλη πλευρά, το HLS είναι συμβατό με τα περισσότερα σύγχρονα προγράμματα περιήγησης, όπως Chrome, Firefox, Safari, Internet Explorer και Edge. Εξαιτίας αυτού, το HLS είναι πιο κατάλληλο για περιπτώσεις χρήσης που απαιτούν συμβατότητα με ένα ευρύ φάσμα προγραμμάτων περιήγησης και συσκευών.
Webrtc vs hls: Ποιο είναι καλύτερο?
Webrtc είναι μια εξαιρετική επιλογή για εφαρμογές ροής σε πραγματικό χρόνο, σε πραγματικό χρόνο. Είναι ιδανικό για περιπτώσεις χρήσης, όπως φωνητικές και βιντεοκλήσεις, διαδικτυακές διασκέψεις και συνομιλία. Αφ ‘ετέρου, HLS είναι μια εξαιρετική επιλογή για τη ροή ζωντανού βίντεο σε ένα μεγάλο κοινό. Είναι ιδιαίτερα κατάλληλο για περιπτώσεις χρήσης, όπως streaming live sports, συναυλίες και άλλα γεγονότα που απαιτούν υψηλή επεκτασιμότητα. Η ικανότητα του HLS να προσαρμόσει σε διαφορετικές συνθήκες δικτύου καθιστά μια δημοφιλής επιλογή για περιεχόμενο ροής σε θεατές σε διάφορες συσκευές και δίκτυα.
Επιπλέον, το HLS έχει καλύτερη υποστήριξη για την προστασία των πνευματικών δικαιωμάτων του περιεχομένου, καθιστώντας την προτιμώμενη επιλογή για περιεχόμενο premium streaming premium. Όταν πρόκειται για συμβατότητα, το HLS έχει ένα μικρό πλεονέκτημα έναντι του WebRTC. Το HLS υποστηρίζεται ευρέως, καθιστώντας την πιο ευέλικτη επιλογή για περιεχόμενο ροής σε ένα ευρύτερο κοινό. Ωστόσο, αυτό έρχεται με το κόστος ελαφρώς υψηλότερης λανθάνουσας κατάστασης.
Εάν η κύρια εστίασή σας είναι η ροή σε πραγματικό χρόνο, χαμηλής καθυστέρησης, το WebRTC μπορεί να είναι η καλύτερη επιλογή σας. Διαφορετικά, εάν η κύρια εστίασή σας είναι η επεκτασιμότητα και η συμβατότητα, τότε το HLS μπορεί να είναι η καλύτερη επιλογή.
συμπέρασμα
Συμπερασματικά, τόσο το WebRTC όσο και το HLS έχουν τα δικά τους μοναδικά χαρακτηριστικά και τις περιπτώσεις χρήσης που τις καθιστούν κατάλληλες για διαφορετικούς τύπους streaming. Το WebRTC ταιριάζει καλύτερα για χαμηλή λανθάνουσα κατάσταση, επικοινωνία σε πραγματικό χρόνο, όπως φωνητικές και βιντεοκλήσεις, διαδικτυακή διάσκεψη και συνομιλία. Από την άλλη πλευρά, το HLS είναι το καλύτερο κατάλληλο για την υψηλής ποιότητας ροή προ-καταγεγραμμένων βίντεο σε ένα ευρύ φάσμα συσκευών.
Συχνές ερωτήσεις
1. Χρησιμοποιεί το WebRTC TCP ή UDP?
Το WebRTC χρησιμοποιεί τόσο TCP όσο και UDP ανάλογα με τον τύπο των δεδομένων που μεταδίδονται. Χρησιμοποιεί το TCP για τον έλεγχο των μηνυμάτων και το UDP για ροή μέσων ενημέρωσης.
2. Χρησιμοποιεί το YouTube HLS?
Ναι, το YouTube χρησιμοποιεί το HLS (HTTP Live Streaming) ως ένα από τα πρωτόκολλα streaming για την παροχή βίντεο στους θεατές.
3. Είναι WebRTC μόνο για προγράμματα περιήγησης?
Το WebRTC είναι κυρίως τεχνολογία με βάση το πρόγραμμα περιήγησης, αλλά μπορεί επίσης να χρησιμοποιηθεί σε εγγενείς εφαρμογές μέσω των βιβλιοθηκών WebRTC.
4. Χρησιμοποιεί το Netflix WebRTC?
Όχι, το Netflix δεν χρησιμοποιεί το WebRTC για ροή. Χρησιμοποιούν τη δική τους ιδιόκτητη τεχνολογία που ονομάζεται Adaptive Streaming μέσω HTTP (ASOH) που βασίζεται σε HTTP Live Streaming (HLS).