האם WebRTC משתמש ב- HTTP?
האם WebRTC משתמש ב- HTTP
פתיחת חיבור TCP חדש לכל בקשה הפכה לבעיה עם התפתחות האינטרנט. התחלנו לבנות יישומים מלאים במקום דפי אינטרנט פשוטים, ומספר המדיה והקבצים שדפדפן היה צריך לאחזר הפך להיות יותר. דמיין יישום אינטרנט טיפוסי הדורש קובץ HTML, CSS ו- JavaScript, כמו גם תמונות שונות ונכסים אחרים. לכל קובץ היה צריך ליצור חיבור חדש.
WebRTC לעומת הזרמת HTTP
Возожно, alle orкрדיר.
-דון בברט
ניסיתי את פרוטוקולי הזרמת WebRTC ו- HTTP (HLS, MPEG-DASH) לזרמת וידאו חיים כבר כמה ימים, וגיליתי שלמרות ש- WEBRTC משיג חביון משנה שני, פרוטוקולי הזרמת HTTP יש תמיד חביים רב שניות. לפיכך יש לי כמה שאלות הקשורות לסטרימינג WebRTC לעומת 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 מנקודת המבט של א שירות הזרמת וידאו. בואו נתחיל!
סקירה מהירה של סטרימינג מבוסס http & webrtc
פרוטוקולים מבוססי HTTP הם שרתי אינטרנט רגילים מבחינה טכנית ששולחים הורדות מתקדמות. הם משתמשים בזרם סיביות אדפטיבי כדי לספק את חוויית האיכות והצפייה הגבוהה ביותר האפשרית, ללא קשר לחיבור, לתוכנה או למכשיר. כמה מהפרוטוקולים הנפוצים ביותר מבוססי HTTP הזמינים כוללים MPEG-DASH, Apple’S HLS, Adobe HDS ומיקרוסופט סטרימינג חלק.
WebRTC הוא פרוטוקול חזק המגובה בכלים מצוינים ותמיכה נרחבת בתעשייה. זה נוצר כדי לספק ליישומים יכולות תקשורת בזמן אמת (RTC), ומאפשר להעביר וידאו, שמע או כל סוג אחר של נתונים בין עמיתים. זוהי הבחנה מרכזית בין השניים בהשוואה לסטרימינג מבוסס HTTP, שהיא מכוונת שרת לקוח.
UDP VS. TCP
הרכיבים הבסיסיים של Protocol 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 שפותח כדי להסתגל באופן מלא לאינטרנט המודרני. זה תומך ב -500 מ ‘של חביון בזמן אמת.
WebRTC נועד לספק תקשורת דו כיוונית בזמן אמת. שלא כמו HLS, המבוסס על TCP, WebRTC מבוסס על ה- UDP. המשמעות היא ש- WebRTC יכול להתחיל מבלי שהלקוח והשרת יחליפו מידע על לחיצת יד כלשהי. כתוצאה מכך, WebRTC מהיר יותר, אך הוא גם הופך אותו לרגיש יותר לתנודות רשת.
WebRTC הוא הפרוטוקול לשימוש אם הפיתרון שלך דורש זרם עמיתים לעמית, בזמן אמת. עם זאת, אם אתה צריך לגדל את הקהל שלך מעל 50 אנשים, תצטרך לשקול מחדש את האסטרטגיה שלך.
בהשוואה ל- HLS, קנה המידה WebRTC קשה יותר. עם זאת, ניתן לפתור זאת באמצעות זרימת עבודה היברידית. הבחירה שלך תיקבע על ידי מקרה השימוש שלך וגודל קהל היעד שלך.
כשמדובר בהגעה לקהלים מאסיביים, פרוטוקולים מבוססי HTTP יוצאים למעלה.
האם WebRTC משתמש ב- HTTP
פתיחת חיבור TCP חדש לכל בקשה הפכה לבעיה עם התפתחות האינטרנט. התחלנו לבנות יישומים מלאים במקום דפי אינטרנט פשוטים, ומספר המדיה והקבצים שדפדפן היה צריך לאחזר הפך להיות יותר. דמיין יישום אינטרנט טיפוסי הדורש קובץ HTML, CSS ו- JavaScript, כמו גם תמונות שונות ונכסים אחרים. לכל קובץ היה צריך ליצור חיבור חדש.
WebRTC לעומת הזרמת HTTP
Возожно, alle orкрדיר.
-דון בברט
ניסיתי את פרוטוקולי הזרמת WebRTC ו- HTTP (HLS, MPEG-DASH) לזרמת וידאו חיים כבר כמה ימים, וגיליתי שלמרות ש- WEBRTC משיג חביון משנה שני, פרוטוקולי הזרמת HTTP יש תמיד חביים רב שניות. לפיכך יש לי כמה שאלות הקשורות לסטרימינג WebRTC לעומת HTTP.
1. כיצד WebRTC מסוגל להשיג איחור שנייה תת -שניה בהשוואה לפרוטוקולי הזרמת HTTP?
2. אם WebRTC כבר מספקת הזרמת וידאו נמוכה, מדוע יש מאמץ לאחד פרוטוקולי הזרמת HTTP תחת תקן MPEG-DASH?
3. איך Webrtc השווה ל- RTMP? (לא בדקתי עד עכשיו RTMP, אבל אני רוצה לדעת אם אפשר להשיג השהיות תת-שניות עם RTMP)
מחקר השוואתי בין סטרימינג מבוסס WebRTC ו- HTTP
במשך תקופה ארוכה, הורדת חביון הזרימה הייתה נושא פופולרי. ידוע כי חביון של עשרות שניות, ואפילו דקה אחת, מתרחש עם סטרימינג מבוסס HTTP בעבר. עם חביון שידור מסורתי בשניות חד ספרתי ופתרונות מתעוררים כמו שירותי פיתוח WebRTC , השאלה היא איזו גישה לנקוט. סטרימינג WebRTC מסוגל לספק וידיאו לא רק בשתי שניות, אלא בפחות מ- 500 אלפיות השנייה. זוהי כיום טכנולוגיית הזרימה של האחינה הנמוכה ביותר הקיימת, ומאפשרת שידור מיידי כמעט.
במדריך ניפטי זה, נבחן כיצד WebRTC עובד ונשווה אותו ל- HTTP מנקודת המבט של א שירות הזרמת וידאו . בואו נתחיל!
סקירה מהירה של סטרימינג מבוסס http & webrtc
פרוטוקולים מבוססי HTTP הם שרתי אינטרנט רגילים מבחינה טכנית ששולחים הורדות מתקדמות. הם משתמשים בזרם סיביות אדפטיבי כדי לספק את חוויית האיכות והצפייה הגבוהה ביותר האפשרית, ללא קשר לחיבור, לתוכנה או למכשיר. כמה מהפרוטוקולים הנפוצים ביותר מבוססי HTTP הזמינים כוללים MPEG-DASH, Apple’S HLS, Adobe HDS ומיקרוסופט סטרימינג חלק.
WebRTC הוא פרוטוקול חזק המגובה בכלים מצוינים ותמיכה נרחבת בתעשייה. זה נוצר כדי לספק ליישומים יכולות תקשורת בזמן אמת (RTC), ומאפשר להעביר וידאו, שמע או כל סוג אחר של נתונים בין עמיתים. זוהי הבחנה מרכזית בין השניים בהשוואה לסטרימינג מבוסס HTTP, שהיא מכוונת שרת לקוח.
UDP VS. TCP
הרכיבים הבסיסיים של Protocol 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 שפותח כדי להסתגל באופן מלא לאינטרנט המודרני. זה תומך ב -500 מ ‘של חביון בזמן אמת.
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. נחקור כל פרוטוקול על ידי חקירת הטכנולוגיה שמאחוריה, מה זה’S המשמש בצורה הטובה ביותר, וחוזקותיו וחולשותיו.
· פורסם ב -26 בספטמבר 2022
צורות התקשורת שלנו משתפרות כל העת: הופכת מהירה יותר, נוחה יותר ואמינה יותר. התקשורת שלנו התפתחה משליחת הודעות באמצעות יונים נשאיות, לדואר דואר, להמצאת הקווי, להודעות דוא”ל והודעות טקסט ממכשיר קטן שמתאים לכיסים שלנו.
בעתיד, אנו עשויים אפילו לעבור פגישות ומסיבות יום הולדת ל- VR (אני מקווה שזו רק בדיחה!). אבל צורת התקשורת הטובה ביותר תמיד תהיה תלויה במצב.
הודעת טקסט מהירה לפעמים טובה יותר מדוא”ל ארוך. בפעמים אחרות, שיחת וידאו עם הצוות היא הדרך הטובה ביותר להחליף מידע. לעומת זאת, יש לשלוח מסמכי ביטוח חשובים דרך דואר רגיל ולמסור אותו בעותק קשיח.
הדבר נכון גם לגבי טכנולוגיות האינטרנט והפרוטוקולים שאנו משתמשים בהם. ליישומים שונים יש צרכי תקשורת שונים.
סקירה כללית
במאמר זה, אנחנו’לכיסוי חלק פופולרי פרוטוקולי תקשורת אנו יכולים להשתמש כמפתחים ולחקור את היתרונות והחסרונות של האפשרויות השונות. שום פיתרון אינו טוב יותר מאחר – יש רק כמה טובים יותר ליישום או לבעיה מסוימים.
יישומים מסוימים דורשים חיבור עמיתים לעמית, עם חביון נמוך והעברת נתונים גבוהה ויכולים לקבל אובדן מנות (מידע) כלשהו. יישומים אחרים יכולים לסקר את השרת על בסיס צפוי וללא’לא צריך לקבל תקשורת מעמיתים שונים. יישומים אחרים דורשים תקשורת בזמן אמת עם אמינות הנתונים.
משחק מקוון מרובי משתתפים, אפליקציית העברת הודעות, אתר בלוגים, אפליקציית גלריית מדיה ותוכנת ועידת וידאו כוללת רמות שונות של תקשורת וצורכי נתונים.
אם אתה בונה פיתרון הזרמת וידאו, ישנם גם שיקולים אחרים, עיין במאמר שלנו בפרוטוקולי הזרמת וידאו למידע נוסף על בחירת הנכון.
מהו פרוטוקול תקשורת?
ברשת מחשבים, פרוטוקול הוא קבוצה של כללים השולטים כיצד מחליפים נתונים בין מכשירים. הפרוטוקול מגדיר את הכללים, התחביר, הסמנטיקה והסנכרון של תקשורת ושיטות שחזור שגיאות אפשריות.
הפרוטוקולים שנדונו במאמר זה מגדירים כיצד תוכנת שכבת יישומים תתקשר זה עם זה. פרוטוקולים שונים מקפידים על כללים שונים, וזה’s חיוני להבנת נקודות החוזק והמגבלות של כל אחת מהן. במאמר זה, אתה’ילמד על הפרוטוקולים הבאים:
Http (פרוטוקול העברת היפר -טקסט) הוא פרוטוקול יישומים למערכות מידע מבוזרות, שיתופיות והיפרמדיה. HTTP הוא הבסיס לתקשורת נתונים עבור האינטרנט העולמי. Hypertext הוא טקסט מובנה המשתמש בקישורים לוגיים (היפר -קישורים) בין צמתים המכילים טקסט. HTTP הוא הפרוטוקול להחלפה או העברת היפר -טקסט.
Http/2 נועד להתייחס לחסרונות של פרוטוקול HTTP המקורי ולשפר את הביצועים. HTTP/2 מהיר ויעיל יותר מ- HTTP/1.1, והוא תומך במולטיפלקס כדי לאפשר לבקשות ותגובות מרובות על חיבור יחיד. תכונות בולטות אחרות כוללות דחיסת כותרות ודחיפת שרת. זה’S הופך בהדרגה לפרוטוקול ברירת המחדל לתעבורת אתרים.
שקע רשת הוא פרוטוקול המאפשר תקשורת דו כיוונית בין לקוח לשרת. זו בחירה פופולרית ליישומים המטפלים בנתונים בזמן אמת, כגון יישומי צ’אט, משחק מקוון וזרם נתונים חיים.
GRPC היא מסגרת RPC מודרנית עם קוד פתוח המשתמשת ב- HTTP/2 לתחבורה. זו בחירה מצוינת עבור יישומים שצריכים לבצע הרבה שיחות API קטנות ומהירות. GRPC מייצר כריכות לקוח ושרתים חוצה פלטפורמות לשפות רבות, מה שמאפשר ליישום לקוח להתקשר ישירות לשיטה ביישום שרת במחשב אחר כאילו היה אובייקט מקומי.
Webrtc היא טכנולוגיה המאפשרת תקשורת בזמן אמת בין לקוחות ומאפשרת ליצור קשרים ישירים של עמיתים לעמית. זה משמש לווידיאו, צ’אט, שיתוף קבצים ויישומי הזרמת וידאו חיים.
הבנת TCP ו- UDP
לפני שמתעמקים בשכבות היישום שהוזכרו לעיל, זה’חשוב לקבל הבנה בסיסית של TCP ו- UDP, שתי שכבות תובלה הבסיסיות המאפשרות העברת נתונים בדרכים שונות באופן מהותי.
TCP (פרוטוקול בקרת הילוכים) הוא תקן המגדיר כיצד לקבוע ולשמור על שיחת רשת דרך האינטרנט. TCP הוא הפרוטוקול הנפוץ ביותר באינטרנט וכל רשת מונחה חיבור. כשאתה גולש באינטרנט, המחשב שלך שולח מנות TCP לשרת אינטרנט. שרת אינטרנט מגיב על ידי שליחת מנות TCP בחזרה למחשב שלך. תחילה נקבע חיבור בין שני מכשירים לפני תחליף כל נתונים, ו- TCP משתמש בתיקון שגיאות כדי להבטיח שכל המנות מועברות בהצלחה. אם חבילה אבודה או פגומה, TCP תנסה להידבק מחדש.
UDP (פרוטוקול Datagram)) הוא פרוטוקול שכבת הובלה ללא חיבור, לא אמין. זה לא דורש חיבור להקים או לתחזק אותו ואינו מבטיח שהודעות יועברו לפי הסדר. כלומר יכול להיות אובדן נתונים כלשהו אם חבילה לא נשלחת או אם היא’s פגום. UDP משמש לרוב לזרמת מדיה או יישומים בזמן אמת שבהם מנות שנשמטו פחות בעייתיות מאשר להבטיח משלוח.
Http/1
זה’חשוב לקבל הבנה בסיסית של הבסיס של כל התקשורת מבוססת האינטרנט והעברת הנתונים בשכבת היישום – HTTP (פרוטוקול העברת היפר -טקסט).
הבנת HTTP/1 והמגבלות שלה תהיה חשובה גם לפני שנוכל לחקור את הפרוטוקולים האחרים ביתר פירוט ולהעריך באופן מלא את מה שהם מספקים.
עם HTTP, לקוחות ושרתים מתקשרים על ידי החלפת הודעות בודדות. הודעות שהלקוח שולח נקראות בקשות, וההודעות שנשלחו על ידי השרת נקראות תגובות. הודעות אלה נשלחות כהודעות טקסט רגילות באמצעות חיבור TCP. ניתן גם להצפין אותם באמצעות TLS ונשלחים באמצעות פרוטוקול HTTPS.
בדרך כלל לקוח יהיה דפדפן אינטרנט או יישום הפועל על משתמש’S טלפון או מחשב, אבל זה יכול להיות טכנית כל דבר, למשל, סקריפט הזוחל אתרים.
בקשות HTTP יכולות לזרום רק בכיוון אחד, מהלקוח לשרת. אין דרך לשרת להתחיל תקשורת עם הלקוח; זה יכול להגיב רק לבקשות.
HTTP מושלם ליישומי אינטרנט ולקוח מסורתיים, בהם המידע נשלח על בסיס צורך. לדוגמה, אתה מרענן דף, ומוגשת בקשה לשרת כדי להביא את המידע העדכני ביותר.
עם זאת, פרוטוקול זה התרחב באופן שלא נועד במקור. בסעיפים הבאים, אנו’לחקור כמה HTTP/1’מגבלות S.
HTTP/1 בזמן אמת
HTTP/1 אינו יעיל כאשר יש לשלוח הודעות בזמן אמת מהלקוח לשרת ולהיפך. לדוגמה, אם מידע חדש זמין בשרת שצריך לשתף אותו עם הלקוח, עסקה זו יכולה להתרחש רק ברגע שהלקוח יוזם בקשה.
יש דרכים לעקיפת הבעיה, תוך שימוש בטכניקות הנקראות סקרים קצרים וארוכים של HTTP, כמו גם באירועים שנמצאו בשרת.
סקרים קצרים
הסקרים הקצרים HTTP הם טכניקה בה הלקוח שולח שוב ושוב בקשות לשרת עד שהוא מגיב עם נתונים חדשים. ברגע שהוא מקבל נתונים זה מתחיל את התהליך שוב ושואל שוב ושוב עד שמשהו אחר זמין.
זוהי אסטרטגיית תקשורת בזמן אמת לא יעילה, מכיוון שהיא מבזבזת משאבים רבים על ידי העברת וניתוח ברציפות של בקשות/תגובות HTTP ברציפות.
סקרים ארוכים
עם סקירה ארוכה של HTTP, בקשה יחידה מתבצעת מהלקוח ואז השרת שומר על חיבור זה פתוח עד שנתונים חדשים זמינים וניתן לשלוח תגובה. לאחר שהלקוח יקבל את התגובה, חיבור חדש נעשה מייד שוב.
הסקרים הארוכים יעילים יותר מאשר בקלפי קצר אך אינו פיתרון אופטימלי לתקשורת בזמן אמת.
אירועים שנמצאו בשרת (SSE)
אירועים שנשלחו לשרת מאפשרת ללקוח להחזיק חיבור ולקבל עדכונים (הודעות דחיפה) משרת בזמן אמת, מבלי שתצטרך לסקר את השרת לקבלת נתונים חדשים כל הזמן. זהו חיבור לכיוון אחד, כך שלא תוכלו לשלוח אירועים מהלקוח לשרת.
SSE הוא תקן המתאר כיצד השרתים יכולים ליזום העברת נתונים ללקוחות.
בעיית הביצועים עם HTTP/1
מרבית תזרימי נתוני HTTP מורכבים מעברות נתונים קטנות ומעוררות, ואילו TCP מותאם לחיבורים ארוכי שנים והעברות נתונים בתפזורת. זמן נסיעה הלוך ושוב הוא הגורם המגביל בתפוקת TCP ובביצועים ברוב המקרים. כתוצאה מכך, חביון הוא צוואר בקבוק הביצועים ורוב יישומי האינטרנט מספקים עליו.
משמעות המשמעות של לעיל היא ש- TCP, בו משתמש HTTP, נבנה כדי לטפל בחיבורים ארוכי חיים ולהעברת נתונים רבים. לעומת זאת, HTTP/1 היה פותח חבורה של חיבורי TCP קצרי מועד ובדרך כלל שולח רק פיסות נתונים קטנות.
חסימת ראש קו
נושא ביצועים עם HTTP/1.0 הוא שאתה צריך לפתוח חיבור TCP חדש לכל בקשה/תגובה. זו לא הייתה בעיה עבור מה שהומצא בתחילה HTTP – להביא מסמך היפר -טקסט. חלק המסמך חשוב מכיוון ש- 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, נוספו כותרות נוספות למפרט. למפתחים יש גם אפשרות להוסיף עוגיות לכותרות, ואלה יכולים להיות גדולים באופן שרירותי. זה מוסיף הרבה נפיחות, מכיוון שכל בקשה ותגובה צריכים להעביר את כל מידע הטקסט הזה, ו- 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:
- משתמש בדחיסת כותרת כדי להפחית את גודל הכותרות, שנמנעת משליחת אותן כותרות טקסט רגילות שוב ושוב. זה מקטין משמעותית את תקורה של בקשות/תגובות וכמות הנתונים שנשלחו.
- מאפשר עדיפות, לאפשר ללקוח (המפתח) לציין את העדיפות של המשאבים שהוא צריך. זה’ניתן גם לעדכן את העדיפות של בקשות שוטפות – לדוגמה, על גלילה, אם תמונה כבר לא נראית, העדיפות יכולה להשתנות.
- משתמש בדחיפת שרת כדי לשלוח נתונים ללקוח לפני שהוא מבקש אותם. ניתן להשתמש בזה כדי לשפר את זמני הטעינה על ידי ביטול הצורך של הלקוח לבקש מספר בקשות.
איך עובד HTTP/2?
יחידת הפרוטוקול הבסיסית ב- HTTP/2 היא א מִסגֶרֶת. מנגנון מסגור בינארי חדש זה משנה את אופן החלפת הנתונים בין הלקוח לשרת.
התקן מגדיר עשרה סוגי מסגרת שונים, שכל אחד מהם משרת מטרה שונה. לדוגמה, כותרות ומסגרות נתונים מהוות בסיס לבקשות ותגובות HTTP:
א מִסגֶרֶת היא יחידת התקשורת הקטנה ביותר הנושאת סוג מסוים של נתונים.
כמה דוגמאות מסגרת אחרות הן:
- הגדרות: החלף מידע על הגדרת מידע בתחילת הדרך או במהלך חיבור.
- עדיפות: הקצאת העדיפות מחדש להודעות.
- Push_Promise: מאפשר לשרת לדחוף לך נתונים – זה משמש כהבטחה למה השרת ישלח. לדוגמה, אם אתה מבקש את האינדקס.HTML, השרת יכול ליצור Push_Promise שמבטיח לדחוף את האפליקציה.JS וסגנונות.CSS, כלומר הלקוח אינו צריך לבקש משאבים אלה.
מסגרות משולבות ליצירת א הוֹדָעָה, לדוגמה, הכותרת ומסגרת הנתונים בתמונה למעלה. זה שווה לבקשה או לתגובה רגילים.
ואז סוף סוף, סדרה של הודעות יכול להיות חלק מ- זרם. זה מאפשר זרימת נתונים דו כיוונית בין הלקוח לשרת לבין כפול בקשה ותגובה מלאה.
התמונה למעלה מעט מטעה, ומעוררת רושם כי חיבורים מרובים פתוחים בין הלקוח לשרת. אבל זה חיבור TCP יחיד, והנתונים זורמים בחופשיות בין הלקוח לשרת בצורה לא חוסמת.
שכבת המסגור הבינארית החדשה מאפשרת ללקוח ולשרת לפרק את הודעת HTTP למסגרות עצמאיות, לשחרר אותם ואז להרכיב אותם מחדש בקצה השני.
זהו רק סיכום של איך http/2.0 עובד. אם אתה רוצה ללמוד עוד ולחקור סדרי עדיפויות, דחיפת שרת ודחיסת כותרת, עיין בכך במאמר עומק. להיסטוריה של הבעיות של HTTP/1 וכיצד HTTP/2 פותר אותן, צפה בסרטון זה.
הזרמת נתונים דו כיוונית HTTP/2
- חיבור HTTP/2 יחיד יכול להכיל מספר זרמים פתוחים במקביל, כאשר כל מסגרות של נקודת קצה משולבות מזרמים מרובים.
- ניתן להקים זרמים ולהשתמש בהם באופן חד צדדי או לשתף אותו על ידי הלקוח או השרת.
- ניתן לסגור זרמים בשני נקודות הקצה.
יש הרבה אי הבנה עם פונקציונליות הדחיפה של השרת, המאפשרת לשרת מעל HTTP/2 לשלוח באופן יזום משאבים שהוא חושב שאולי תזדקק לו, למשל, .js ו- .קבצי CSS, מבלי שהלקוח יבקש זאת. זה לא קשור לסטרימינג דו כיווני והוא רק טכניקת אופטימיזציה לאינטרנט למשאבים הניתנים למטמון.
מה שנכון הוא שעם HTTP/2 השרת יכול’לא יוזם א זרם. אך ברגע שהלקוח פותח זרם על ידי שליחת בקשה, שני הצדדים יכולים לשלוח נתונים מסגרות מעל שקע מתמשך בכל עת. דוגמה מצוינת לכך היא GRPC, עליו נדון בהמשך.
עם HTTP/2, ניתן להשיג הזרמת נתונים דו כיוונית, ואתה יכול לטעון שזה’זה פיתרון אופטימלי יותר מאשר משהו כמו WebSockets, או שאתה יכול לטעון שזה לא. אָנוּ’אני דן בזה ביתר פירוט בקטע Websocket.
WebSockets
מטרת טכנולוגיה זו היא לספק מנגנון ליישומים מבוססי דפדפן הזקוקים לתקשורת דו כיוונית עם שרתים שאינם מסתמכים על פתיחת חיבורי HTTP מרובים (E.ז., באמצעות XMLHTTPREQUEST או IFRAMES ובסקרים ארוכים).
הומצאו WebSocket.
לאחר הקמת חיבור שקע, הלקוח אינו צריך לסקר שרת לקבלת עדכונים. במקום זאת, התקשורת מתרחשת דו כיוונית. זה משפר את מהירות ויכולת בזמן אמת בהשוואה לתיקון המקורי והקצר של HTTP/1. ל- Websocket אין פורמט שהוא עומד בו. אתה יכול לשלוח כל נתונים, טקסט או בתים – גמישות זו היא אחת הסיבות לכך ש- WebSockets פופולריים.
חלק מזה אולי נשמע מוכר למה שדיברנו עליו בקטע HTTP/2, אבל זה’חשוב לציין כי הומצאו Obsockets הרבה לפני HTTP/2. אָנוּ’ישווה אותם יותר מאוחר יותר.
איך עובדי WebSockets עובדים
WebSockets פועלים למעשה כשכבת הובלה מעל TCP.
כדי לקבוע חיבור שקע של WebSocket, הלקוח והשרת צריך תחילה לבצע לחיצת יד על HTTP רגיל/1.חיבור אחד. לחיצת יד זו היא הגשר מ- HTTP ל- WebSockets.
להלן בקשת לחיצת יד לדוגמא. הלקוח יכול להשתמש ב- HTTP/1.מנגנון 1 שנקרא כותרת שדרוג כדי להחליף את החיבור שלו מ- HTTP ל- WebSockets:
קבל /צ'אט http /1.מארח אחד: דוגמה.com: 8000 שדרוג: חיבור שקע: שדרג את Sec-Websocket-Key: dghlihnhbxbszsbub25jzq == sec-websocket-version: 13
לאחר מכן השרת יסיים את לחיצת היד עם תגובה מיוחדת המציינת שהפרוטוקול ישתנה מ- HTTP ל- WebSocket:
Http/1.1 101 פרוטוקולי מיתוג שדרוג: חיבור רשת רשת: שדרג את Sec-Websocket-accept: S3pplmbitxaq9kygzzhzrbk+xoo =
WebSockets דורשים מזהה משאבים אחיד (URI) עם WS: // או WSS: // סכמה. ערכת ws: // משמשת לחיבורים לא מוצפנים, ותכנית wss: // משמשת לחיבורים מוצפנים, בדומה לאופן בו כתובות כתובות http משתמשות בכתובת http: // או https: // סכמה.
לאחר הקמת ערוץ התקשורת הדו כיווני הלקוח והשרת יכול לשלוח הודעות קדימה ואחורה. הודעות אלה יכולות להיות כל דבר, החל מנתונים בינאריים ועד טקסט. חיבור ה- WebSocket יישאר פתוח עד שהלקוח או השרת יתנתק.
ריבוי שקע של WebSocket
בזמן הכתיבה, פרוטוקול ה- WebSocket אינו תומך בכפולות מובנות. דיברנו על ריבוי מרבבים בקטע HTTP/2, ולמדנו את זה’S תכונה מובנית עבור HTTP/2, והיא’ניתן לקבל זרמים מרובים שכפילו על אותו חיבור. לכל זרם מקבל מזהה ייחודי, ולכל המסגרות שנשלחות יש מזהה המשויך לזרם המתאים.
אי תמיכה בכפולות פירושו שפרוטוקול WebSocket דורש חיבור הובלה חדש עבור כל חיבור שקע. לדוגמה, לקוחות מרובים הפועלים בכרטיסיות שונות של אותו דפדפן יביאו לחיבורים נפרדים. בדרך כלל לכיוון מרבבים על פני רשתות זה משהו שתצטרך ליישם כמפתח או להסתמך על תוסף או ספרייה של צד שלישי.
WebSocket לעומת HTTP/2
אז, האם HTTP/2 הוחלף על WebSockets? התשובה הקצרה היא לא. התשובה הארוכה יותר היא ש- HTTP/2 מאפשר זרימה דו כיוונית, וכתוצאה מכך, רשתות האינטרנט אינן האפשרות היחידה/הטובה ביותר. HTTP/2 כמפרט עושה לך יותר עבודה בהשוואה ל- WebSockets. יש לו ריבוי כפולות מובנות, וברוב המקרים, יביא לפחות חיבורי TCP פתוחים למקור. מצד שני, WebSockets מספקים הרבה חופש ואינם מגבילים כיצד נשלחים נתונים בין הלקוח לשרת ברגע שנקבע חיבור. עם זאת, תצטרך לנהל את חיבור מחדש את עצמך (או לסמוך על ספרייה שעושה זאת בשבילך).
איזה מהם בסופו של דבר טוב יותר, ואיפה האחד יעבוד והשני לא, עומד לדיון, ומאמר זה אינו מספק תשובה דעתנית. WebSockets מציעים גמישות רבה, וכסטנדרט מבוסס, הוא נתמך במלואו על ידי כל הדפדפנים המודרניים, והמערכת האקולוגית סביב ספריות הלקוחות והשרתים חזקה.
לדיונים מפורטים ודעתיים יותר, עיין בשאלות הצפת ערימה אלה:
- האם HTTP/2 הופך את שקע האינטרנט למיושן
- HTTP/2 או WebSockets להודעות לקוח חביון נמוך להודעות שרת
- HTTP/2 לעומת קזרות אינטרנט לזרמת הודעות דו כיווניות
יש גם RFC המאפשר מנגנון להפעלת פרוטוקול WebSocket על זרם יחיד של חיבור HTTP/2.
היכולת לאתחל את ה- WebSockets מ- HTTP/2 מאפשרת לשתף חיבור TCP אחד על ידי שני הפרוטוקולים ומרחיבה את השימוש היעיל יותר של HTTP/2 ברשת ל- WebSockets.
זה יושם ב- Chrome ו- Firefox. תוכלו לקרוא את מסמך העיצוב של Chrome והמוטיבציה כאן.
מתי אתה צריך להשתמש ב- WebSockets?
WebSockets מתאימים ביותר ליישומים הזקוקים לתקשורת דו כיוונית בזמן אמת וכאשר יש להעביר פיסות נתונים קטנות במהירות, למשל:
- יישומי צ’אט
- משחקי מרובה משתתפים
- יישומי עריכה שיתופיים
- סיקר ספורט חי
- בקשה לסחר במניות
- הזנות פעילות בזמן אמת
במקרה, זהו תחום שבו הצוות שלנו יש ניסיון רב. אָנוּ’מחדש בהרחבה באמצעות WebSocket.
התמיכה ב- Websocket. עם זאת, אין להשתמש יתר על המידה של WebSockets; תלוי במה שאתה רוצה, יתכנו אלטרנטיבות טובות יותר.
לדוגמה, אירועים שנשלחו לשרת (SSE) יעילים על HTTP/2 ופשוטים לשימוש. SSE אינה מערכת תקשורת דו כיוונית; השרת דוחף באופן חד צדדי נתונים ללקוח. אבל אם כל מה שאתה צריך זה דרך לשרת לשלוח נתונים ללקוח, זו עשויה להיות אפשרות טובה יותר מאשר להוסיף את התקורה של WebSockets. SSE נופל גם ל- HTTP/1.1 כאשר HTTP/2 אינו זמין. בנוסף, הלקוח (או הדפדפן) מנהל את החיבור עבורך ותומך בחיבור מחדש אוטומטי.
אם חיבור על פני רשת רשתות אבוד, אין מנגנונים כלולים לאיזון עומסים או לחיבור מחדש. יש ליישם זאת באופן ידני או על ידי ספריות צד ג ‘.
GRPC
GRPC הוא מסגרת נוהל מרחוק עם ביצועים פתוחים מודרניים עם קוד פתוח (RPC) שיכולה לפעול בכל סביבה. זה יכול לחבר ביעילות שירותים במרכזי נתונים ומחוצה להם עם תמיכה ניתנת לחיזוק לאיזון עומסים, מעקב, בדיקת בריאות ואימות. זה מיושם גם בקילומטר האחרון של מחשוב מבוזר לחיבור מכשירים, יישומים ניידים ודפדפנים לשירותי Backend.
GRPC היא מערכת RPC מבוססת קוד פתוח, שפותחה בתחילה ב- Google. GRPC מאפשר ליישומים לתקשר בשקיפות ומפשט את בניית המערכות המחוברות.
זה מייצר כריכות לקוח ושרתים חוצה פלטפורמות לשפות רבות, מה שמאפשר ליישום לקוח להתקשר ישירות לשיטה ביישום שרת במחשב אחר כאילו היה אובייקט מקומי.
בנוי על HTTP/2, GRPC ממנף תכונות כמו סטרימינג דו כיווני ואבטחת שכבת תחבורה מובנית (TLS).
מוטיבציה של GRPC
זה’חשוב לצלול למוטיבציה שמאחורי GRPC ומדוע הומצא כדי להבין את היתרונות שלה. מדוע לא להשתמש בטכנולוגיה הקיימת שכבר יש לנו: http/2 ו- Websockets, למשל? מדוע אנו זקוקים לשכבה נוספת של הפשטה על גבי מה שכבר יש לנו?
ישנן דרכים שונות בהן ניתן לבנות ולשלוח נתונים דרך האינטרנט. כמה דוגמאות פופולריות הן סבון, מנוחה ו- graphql. אתה יכול אפילו ליצור פרוטוקול משלך, לשלוח נתונים על TCP גולמי ולהטפל ביישום בעצמך אם אתה רוצה.
אבל לא משנה מה תבחר כפרוטוקול התקשורת שלך, הבעיה היא שאתה צריך להבטיח שהלקוח והשרת יסכימו על הפרוטוקול. לדוגמה, אם אתה’לבנות מחדש API של REST, ספריית הלקוחות שאתה צריך להשתמש בהם כדי לשלוח נתוני REST היא ספריית HTTP. ספריית HTTP מובנית בדפדפן כברירת מחדל, והדפדפן מטפל בכל דבר בשבילך:
- זה קובע תקשורת עם השרת.
- זה מטפל ב- HTTP/2 ונפילה ל- HTTP/1. ויצטרך לתמוך ב- HTTP/3 בעתיד.
- זה מטפל ב- TLS ומשא ומתן על הפרוטוקול.
- זה מטפל בכותרות, נחלים וכל השאר.
אבל מה אם אתה’לא על דפדפן? מה אם אתה’מחדש יישום פייתון הפועל בשרת כלשהו, גולאנג CLI או יישום רפרוף הפועל ב- iOS? כל הלקוחות הללו זקוקים לספריית HTTP משלהם שמבינה את הפרוטוקול שאיתו אתה מתקשר.
למרבה המזל, אנשים מסורים רבים עובדים על ספריות HTTP שונות לכל השפות והמסגרות הללו. בחלק מהשפות יש אפילו ספריות HTTP מרובות עם תכונות שונות. עם זאת, כל זה מגיע בעלות – וזה תחזוקה.
עלות זו יכולה להשפיע עליך במקרה שהיית צריך לשדרג את השרת שלך ל- HTTP/2 אם ספריית גולאנג שאתה משתמש בה תומך בו. אבל, בלקוח פייתון הקדמי שלך, ספריית HTTP המקבילה לא יישמה HTTP/2 או שאולי כבר לא נשמרה. לא ניתן להשוות בין ספריות HTTP שונות בשפות אחרות 1: 1.
ככל שמפרט HTTP מתפתח, על ספריות אלה להתעדכן בהתקדמות, בעיות אבטחה, תכונות חדשות וטלאים אחרים. HTTP הוא רק דוגמא, וזה נכון גם לפרוטוקול WebSocket או לכל אחד אחר. משהו עשוי להיות מיושם היטב בדפדפנים העיקריים, אך יש להעביר את הפונקציונליות למספר שפות ומסגרות שונות.
במה שונה GRPC?
GRPC מנסה לפתור בעיה זו על ידי שמירה על הספרייה לשפות הפופולריות עצמן, כלומר תכונות חדשות שנוספו יתמכו על ידי כל השפות הללו.
מתחת למכסה המנוע, GRPC משתמש ב- HTTP/2 כפרוטוקול שלו, עם זאת, יישום זה מוסתר ממך. בעתיד, מתחזקי GRPC יכולים להחליף בקלות את HTTP/2 ב- HTTP/3, ותיהנו מייד מהשינוי הזה.
GRPC משתמש גם במאגר פרוטוקול כשפת הגדרת הממשק (IDL) ותבנית מחלף ההודעה הבסיסית שלה. פורמט זה הוא ניטרלי בשפה ומאפשר לתקשר בקלות בין שפות תכנות שונות. אָנוּ’לחקור מושג זה יותר בסעיף הבא.
מהם מאגרי פרוטוקול?
מאגרי פרוטוקול הם מנגנון נייטרלי, נייטרלי פלטפורמה, הניתן להרחבה של גוגל להסדרת נתונים מובנים-חשבו על XML, אך קטן יותר, מהיר יותר ופשוט יותר. אתה מגדיר כיצד אתה רוצה שהנתונים שלך יהיו מובנים פעם אחת. אז אתה יכול להשתמש בקוד מקור מיוחד שנוצר כדי לכתוב ולקרוא בקלות את הנתונים המובנים שלך למגוון זרמי נתונים ושימוש במגוון שפות.
באופן מסורתי עם API, אתה לא’יש חוזה המוגדר על ידי הפרוטוקול עצמו. לדוגמה, אם אתה’אתה משתמש במנוחה, אתה’בדרך כלל פשוט שליחת הודעות JSON עם זוגות מפתח/ערך’T נבדק עד שההודעה בסוף הקבלה. הודעה זו יכולה בדרך כלל להיות כל דבר, והיא’עד לך כדי להבטיח שהמבנה הנכון מוגדר.
התבונן בעומס המשא הבא של JSON:
‘תְעוּדַת זֶהוּת’: 123 ‘שֵׁם’: ‘גורדון’, ‘אימייל’: ‘גורדון@איפשהו.io’
לאחר קבלת נתונים אלה בלקוח/שרת ניתן להתייחס אליהם לאובייקט, למשל:
איש כיתה
עם זאת, זה תלוי בך כמפתח ליישם את היגיון ההסתרה וההתנחלויות הנכונות עבור העומס המוזכר לעיל – זה עשוי להיות כרוך בכתיבת שיטות Tojson ו- From Json, תוך הסתמכות על יצירת קוד, או שזה יכול להיות תכונה מובנית של השפה שאתה’שימוש מחדש.
ללא קשר לאופן בו אתה מסדר נתונים אלה, יהיה צורך לעדכן ידנית את הקוד הבסיסי, עשוי להיות בסביבות מרובות, במקרה שהסכמה משתנה.
באמצעות מאגרי פרוטוקול, אתה יוצר סכמה המגדירה את סוג האובייקט לשדות ומציין אילו נדרשים ואילו אופציונליים:
// הודעת הבקשה המכילה את האדם’איש הודעת המידע < optional int32 required string name = 2; optional string email = 3; >// הודעת התגובה המכילה את הודעת הברכות Helloreply
לאחר מכן תוכל לציין את הנהלים שברצונך לחשוף.
// הגדרת שירות הברכה. Service Gerter < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
פעם אתה’VE ציין את מבני הנתונים והסכמה, אתה משתמש בפרוטוקול המהדר של חיץ פרוטוקול כדי ליצור כיתות גישה לנתונים בשפה (ים) המועדפים עליך מהגדרת הפרוטו שלך.
אלה יהיו ממשקים המתארים את האובייקטים המתוארים בקובץ הפרוטו, עם נגישים לכל שדה, כמו גם שיטות להסדרת/ניתוח המבנה כולו/מתילאים גולמיים.
מצבי GRPC
ישנם ארבעה מצבי תחבורה מעל GRPC. ארבעת המצבים הללו משכפלים את ההתנהגות שדיברנו עליהם בעבר, למשל, בקשה/תגובה רגילה, SSE ו- WebSockets.
Unary RPC
RPC Unary הוא בקשה ותגובה פשוטים, בדומה לקריאת פונקציה. הלקוח מבקש נתונים מסוימים, והשרת עושה עיבוד כלשהו ומחזיר את הנתונים האלה.
הזרמת שרת RPC
שרת הזרמת RPCs שבהם הלקוח שולח בקשה יחידה לשרת ומצפה לזרם תגובות או לזרם תגובות. הלקוח קורא מהזרם שהוחזר עד שאין עוד הודעות.
דוגמה לכך היא הזרמת וידאו, שם אתה מבקש לטעון וידאו, והשרת מגיב בזרם הווידיאו.
הזרמת לקוחות RPC
זרימת RPCs הזרמת לקוח כאשר הלקוח כותב רצף של הודעות ושולח אותם לשרת, שוב באמצעות זרם מסופק. לאחר שהלקוח סיים לכתוב את ההודעות, הוא מחכה שהשרת יקרא אותם ויחזיר את תגובתו.
דוגמה היא להעלות קובץ גדול לשרת וברגע שכל הנתונים נשלחים הלקוח יכול לשלוח הודעה סופית כדי לציין שההעלאה הושלמה, והשרת יכול להגיב באופן אופציונלי.
זרם דו -כיווני RPC
שילוב של זרימת לקוח ושרת כאחד. יישום צ’אט או משחק וידאו מרובה משתתפים הוא דוגמה שבה נתונים צריכים לזרום בין הלקוח לשרת בחופשיות.
זרימת דו כיוונית RPCs שבהם שני הצדדים שולחים רצף של הודעות באמצעות זרם קריאה. שני הזרמים פועלים באופן עצמאי, כך שלקוחות ושרתים יכולים לקרוא ולכתוב בכל סדר שהם רוצים.
ב- RPC סטרימינג דו -כיווני, השיחה יוזמת על ידי הלקוח המפנה לשיטה. עיבוד זרם בצד לקוח ושרת הוא ספציפי ליישום. מכיוון ששני הזרמים אינם תלויים, הלקוח והשרת יכולים לקרוא ולכתוב הודעות בכל סדר.
שירותי מיקרו
דוגמה טובה למקום בו GRPC חזק נמצא בתוך שירותי מיקרו.
בדוגמה זו, יש לנו שירותי מיקרו כתובים בפייתון, ג’אווה וגולאנג. אלה צריכים לשלוח נתונים ביניהם.
באמצעות HTTP/1.1 ו- JSON ידרשו מכם ליישם את חיבורי ה- HTTP ואת ההסתרה לכל שפה. תצטרך גם להבטיח כי הסכימה מיושמת כראוי לכל שפה, ואם ה- API ישתנה, יש לעדכן את כל השירותים באופן ידני באופן ידני.
לעומת זאת, GRPC מטפל ביישום ה- HTTP/2.0 פרוטוקול עבורנו. נכתבת סכמה יחידה, וניתן לייצר את הקוד המתאים לכל השפות בהן נעשה שימוש. ניתן לראות בסכימה זו חוזה שכל השפות צריכות לדבוק בו, מה שהופך את התקשורת בין שירותים אלה להרבה יותר קלים ואמינים יותר.
ביצועי GRPC
GRPC הוא מהיר ובדרך כלל הוא הרבה יותר מבצעי מאשר שווה ערך לרדוף:
- מאגרי פרוטוקול מסודרים ונשלחים בינאריות מעל החוט, שהם קטנים משמעותית מהודעות JSON רגילות.
- GRPC משתמש ב- HTTP/2.0 שמספק שיפורים נוספים
ל- GRPC דחיסת היעילות של הנתונים שנשלחו יש יתרון משמעותי, מכיוון שככל שעומס הנתונים המועבר קטן יותר, יש צורך בפחות נסיעות הלוך ושוב של TCP. יחידת ההעברה המרבית (MTU) היא מדידה המייצגת את מנות הנתונים הגדולות ביותר שמכשיר מחובר לרשת יקבל, שהוא 1,500 בתים.
הדחיסה מטופלת עבורך, ואתה נהנה פשוט באמצעות GRPC. כחלופה, ניתן להשתמש במשהו כמו GZIP כדי לדחוס הודעות JSON לפני שליחת HTTP רגיל. עם זאת, זה יכול להיות לא נוח ומוסיף שכבה של מורכבות. שפות וסביבות שונות עשויות להיות בעלות רמות שונות של תמיכה ב- GZIP וכלי דחיסה שווים אחרים. ולכל שפה בה אתה משתמש, תצטרך להגיש מחדש את ההיגיון של הדחיסה וההיגיון התקשורת הנכונים בעצמך. זו בעיה דומה למה שדיברנו על ספריית HTTP.
מתי אתה צריך להשתמש ב- GRPC?
אם אתה’השתמשו בשפות תכנות שונות שונות שצריכות להשתלב בחוזקה זו בזו, ודורשות תקשורת מהירה ותכופה ששולחת נתונים רבים, ואז GRPC יהיה מושלם.
- עם זרימת GRPC, זה’ניתן לקבוע את התקדמות העלאה/הורדה בקלות – מבלי שתצטרך להגיש בקשות מיותרות לעדכונים.
- זה’ניתן לבטל בקשות.
- כל היתרונות של HTTP/2.
- אם GRPC תומך בשפה שלך, אתה לא’לא צריך לדאוג לספריות חיצוניות.
- GRPC אינו תומך בכל השפות.
- הסכימה עשויה להרגיש מגבילה ומסורבלת.
- זה יכול להיות מסובך להתקנה בהשוואה ל- WebSockets.
- עדיין צעירות ושגיאות עשויות להיות קשה לניפוי באגים.
- תקשורת עם GRPC אינה פועלת באופן טבעי מחוץ לקופסה עם דפדפני אינטרנט. אתה צריך להשתמש בספריית GRPC-Web.
Webrtc
פרוטוקול WebRTC הוא פרויקט בחינם עם קוד פתוח המספק יכולות תקשורת בזמן אמת (RTC) ליישום שלך שעובד על גבי תקן פתוח. זה תומך בנתונים וידאו, קול וגנריות שנשלחו בין עמיתים.
הטכנולוגיה זמינה כמערכת של ממשקי API של JavaScript לכל הדפדפנים הגדולים וספריה ללקוחות ילידים כמו יישומי אנדרואיד ו- iOS.
WebRTC שונה מ- WebSockets ו- GRPC באופן מהותי, וכי ברגע שנקבע חיבור, נתונים יכולים (בנסיבות מסוימות) יועברו ישירות בין דפדפנים למכשירים בזמן אמת מבלי לגעת בשרת.
זה מקטין את החביון והופך את WebRTC נהדר לשיתוף שמע, וידאו או מסך – כאשר חביון נמוך הוא חשוב וצריך לשלוח הרבה נתונים.
מוטיבציה webrtc
WebRTC מתכוונת לתקנן כיצד מדיה, כמו שמע ווידאו, מועברת על החוט-ולהשיג זאת בנוחות באמצעות API פשוט לשימוש.
פתרונות אחרים, כמו WebSockets, מאפשרים להעביר כל נתונים בין שני עמיתים; עם זאת, נתונים אלה צריכים להיות מועברים דרך פרוקסי או שרת. הסתמכות על שרת אחר מוסיפה חביון, שכן כל מה שנשלח דרכו צריך להסתכל, לעבד ולפענח. יש איש בינוני בין שני העמיתים. לזרמת וידאו או אפילו צ’אט בזמן אמת, ההשהיה הזו אינה רצויה.
הדפדפנים הם גם חזקים יותר עכשיו מאשר לפני כמה שנים. לדפדפנים יש גישה למצלמת הרשת ולמיקרופון, הדורשים ממשק API מובנה ודרך קלה להעביר מידע עשיר זה. WebRTC נועד לפשט את כל התהליך הזה ולחשוף API קל לשימוש הזמין באופן טבעי בדפדפנים.
הבעיה עם webrtc
המוטיבציה מוגדרת, ונראה כאילו webrtc הוא פיתרון קסום המאפשר תקשורת מהירה יותר בין שני עמיתים. אבל למרבה הצער יש כמה בעיות.
הבעיה הראשונה היא שקביעת חיבור עמית לעמית אינה פשוטה-האינטרנט מסובך, ויש הרבה נתבים, פרוקסים וחומות אש בין אליס בקליפורניה ובן בדרום אפריקה. ובנסיבות מסוימות, יתכן שלא ניתן יהיה לקבל קו ישיר בין שני עמיתים. חיבור בין שני עמיתים עשוי להיות צריך לעקוף חומת אש המונעת חיבורים פתוחים, ייתכן שלא יהיה לך כתובת IP ציבורית, או שהנתב עשוי לא לאפשר חיבור ישיר בין עמיתים.
הבעיה השנייה היא שצריכה להיות דרך לשני עמיתים לגלות זה את זה ולקבוע את המסלול האופטימלי בו תקשורת יכולה לקרות. זה דורש שיתוף מידע מסוים בין שני הלקוחות לפני שהם יכולים לדעת לתקשר בצורה הטובה ביותר אחד עם השני – ודרך משותפת לשתף מידע זה היא באמצעות WebSockets.
וזה קצת מצחיק. AN Http החיבור משודרג לא שקע רשת חיבור רק כדי לשתף מידע כדי ליצור א Webrtc חיבור.
אם אתה באמת רוצה להעריך את מה שעושה webrtc ואת המורכבות שלו, תצטרך להכיר כמה מונחים פוטנציאליים לא מוכרים: נט, הלם, סיבוב, קרח, SDP ואיתות.
איך עובד Webrtc?
בסקירה שלעיל, תיארנו את המוטיבציה של WebRTC, המתארת את הרעיון הבסיסי של איך זה עובד. קטע זה יצלול לכמה מהנושאים ברמה התחתונה שאתה צריך להבין כדי לתפוס את WebRTC באופן מלא.
תרגום כתובת רשת (NAT)
הבנת מה זה NAT ואיך זה עובד חיוני להבנת WEBRTC.
NAT משמש כדי לתת למכשיר שלך (מחשב נייד או טלפון סלולרי) כתובת IP ציבורית; זה חשוב מכיוון שאנחנו רוצים ליצור קשר בין שני עמיתים שהם ככל הנראה שניהם מאחורי נתב. לנתב תהיה כתובת IP ציבורית, ולכל מכשיר המחובר לנתב תהיה כתובת IP פרטית.
מכשירים אלה אינם’לא נחשף ישירות לאינטרנט. במקום זאת, כל התנועה עוברת את הנתב, המתקשר עם העולם החיצון. כשאתה מבקש משאבים משרת מרוחק, הנתב אחראי על “ניתוב” הבקשה מהמחשב המקומי שלך לשרת זה וניתוב התגובה מהשרת חזרה למחשב המקומי שלך.
בקשות אלה מתורגמות מהמכשיר’כתובת IP פרטית לנתב’S IP ציבורי עם יציאה ייחודית – אשר מאוחסנת אז בטבלת NAT. בדרך זו, אין צורך ב- IP ציבורי ייחודי לכל מכשיר ברשת מקומית.
התמונה למעלה היא דוגמה פשטנית לאיך היה נראה טבלת NAT. לתת’העמיד פנים את המכשיר המקומי, עם IP פרטי של 192.168.1.50, מבקש את הכתובת הציבורית 82.88.31.26:80 עבור נתונים מסוימים.
זה מושג על ידי המכשיר המקומי ששלח תחילה את הבקשה לנתב, המנתק את הבקשה למכשיר המרוחק. לאחר מכן הנתב אומר למכשיר המרוחק לשלוח את התגובה לכתובת ה- IP החיצונית שלו, עם יציאה ייחודית, שבדוגמה זו היא 86.88.71.25: 8830.
יציאה ייחודית זו חשובה מכיוון שהיא תאפשר לנתב לקבוע איזה מכשיר מקומי הגיש את הבקשה. כל המידע הזה מאוחסן בטבלת NAT. ברגע שהנתב יקבל את התגובה, הוא יכול לבצע בדיקה ולהחליט לאיזה מכשיר מקומי יש להעביר את התגובה.
זה די פשוט להבנה כשיש לנו צמד בקשה/תגובה רגיל – מכשיר אחד ושרת אחד. אבל מה קורה אם מכשיר חיצוני נוסף עם כתובת IP שונה לחלוטין מחליט לשלוח מנות לכתובת ה- IP החיצונית של הנתב באותה יציאה ששימשה בעבר? האם הנתב קדימה אותו למכשיר המקומי שממפה למספר היציאה הזה?
החלטה זו תלויה באיזה תרגום NAT משתמש הנתב ובסופו של דבר קובע אם ניתן לקבוע חיבור עמיתים לעמית. תלוי בנתב שאתה משתמש בו, הוא יישם תרגום NAT אחר. ישנן ארבע שיטות תרגום NAT שונות:
- אחד לאחד נט
- כתובת מוגבלת Nat
- נמל מוגבל NAT
- נט סימטרי
אחד לאחד נט: ממפה כתובת IP ויציאה חיצונית אחת (בדרך כלל ציבורית) לכתובת IP פנימית אחת ונמל (בדרך כלל פרטי). בדוגמה לעיל, אם הנתב מקבל תגובה ביציאה 8830 ו- IP חיצוני 86.88.71.25, זה יעביר אותו למכשיר המקומי 192.168.1.50, מכיוון שזה המכשיר המקומי שהגיש את הבקשה (מידע שאוחזר מטבלת NAT). לנתב לא אכפת מה- IP היעד או שממנה מקורו בתגובה. אם זה’S ביציאה חיצונית מסוימת זה הולך למכשיר המקומי ההוא.
כתובת מוגבלת Nat: מכשיר מרוחק יכול לשלוח מנות למכשיר המקומי רק אם המכשיר המקומי שלח בעבר חבילה לכתובת ה- IP המרוחקת. לסיכום, אנו מאפשרים זאת רק אם התקשרנו עם המארח הזה לפני כן. בדוגמה לעיל, רק אפשר מנות מ 86.88.71.25.
נמל מוגבל NAT: זהה ל- NAT מוגבלת כתובת, אך ההגבלה כוללת גם מספרי יציאה. המכשיר המרוחק יכול לשלוח מנות רק למכשיר הפנימי אם המכשיר הפנימי שלח בעבר חבילה לכתובת IP x ויציאה p. בדוגמה לעיל, רק אפשר מ 86.88.71.25 ונמל 80.
נט סימטרי: הכי מגביל. בשביל זה IP חיצוני, יציאה חיצונית, IP יעד, וכן נמל היעד כולם צריכים להתאים למה שנמצא בטבלת NAT. המשמעות היא שניתן לשלוח מנות רק ליציאה ספציפית של מכשיר מקומי אם המכשיר הזה היה זה שביקש את ה- IP והיציאה של היעד.
Webrtc לא עובד על NAT סימטרי, וכדי להבין מדוע אנו צריכים להבין מהו שרת הלם.
כלי עזר חציית מושבים ל- NAT (הלם)
Stun הוא פרוטוקול כדי לומר לך את כתובת/יציאת ה- IP הציבורית שלך באמצעות NAT וכדי לקבוע מגבלות בנתב שלך שימנע חיבור ישיר עם עמית. שרת הלם הוא מנגנון עבור לקוחות לגלות נוכחות של NAT, כמו גם את סוג ה- NAT, ולקבוע את כתובת ה- IP החיצונית של NAT ומיפוי יציאה.
מטרת בקשת הלם היא לקבוע את נוכחותך הציבורית כך שניתן יהיה לתקשר עם נוכחות ציבורית זו עם מישהו אחר כדי שיוכלו להתחבר אליך – תקשורת זו מכונה איתות, בו נדון בהמשך.
זה עובד עבור אחד לאחד, כתובת מוגבלת, וכן נמל מוגבל NAT. אבל לא עובד עבור נט סימטרי. מכיוון שכאשר אתה מבקש משרת הלם למידע הציבורי שלך, צמד התקשורת הזה נוצר במיוחד עבור הלקוח שמגיש את הבקשה. לא ניתן לערב עמיתים אחרים המשתמשת בתקשורת סימטרית על יציאת המכשיר המקומי מוגבלת לשרת הלם.
שרתי הלם הם קלים וזולים לתחזוקה. ישנם שרתי הלם ציבוריים שניתן לשאול בחינם.
התמונה למטה ממחישה מתי הלם עובד ומתי ניתן להקים חיבור עמיתים לעמית.
מצד שני, אם לא ניתן לקבוע חיבור עמיתים לעמית. מכיוון שהחיבור הראשוני הוקם עם שרת הלם, ואף עמית אחר לא יכול להשתמש במידע החיבור הזה.
באירוע כזה בו לא ניתן לקבוע חיבור ישיר, עלינו להשתמש בשרת Turn.
מעבר באמצעות ממסרים סביב NAT (סיבוב)
סיבוב הוא פרוטוקול להעברת תנועת רשת כאשר לא ניתן לקבוע חיבור ישיר בין שני עמיתים. לדוגמה, אם עמית אחד עומד מאחורי NAT סימטרי, יש צורך בשרת ייעודי בכדי להעביר את התנועה בין עמיתים. במקרה זה, תיצור חיבור עם שרת פנייה ותגיד לכל העמיתים לשלוח מנות לשרת, שיועבר לך לאחר מכן.
זה מגיע עם תקורה, ושרת פנייה יכול להיות יקר לתחזוקה ולהריץ.
התמונה הבאה ממחישה כיצד משמש שרת פנייה להעברת הודעות בין שני עמיתים או יותר.
הקמת קישוריות אינטראקטיבית (ICE)
ICE משתמש בשילוב של פרוטוקולי הלם והפנה כדי לספק מנגנון למארחים לגלות זה את כתובות ה- IP הציבוריות של זה ולקבוע חיבור ישיר. אם חיבור ישיר אינו אפשרי, ICE ישתמש בתור כדי ליצור חיבור ממסר בין שני המארחים.
כל הדרכים האפשריות הללו לביסוס חיבור נקראות מועמדים לקרח. כל הכתובות שנאספו נשלחות לעמיתים המרוחקים באמצעות SDP, אותו נחקור בהמשך. WebRTC משתמש במידע זה על כל לקוח כדי לקבוע את הדרך הטובה ביותר להתחבר לעמית אחר. יכול להיות ששני העמיתים נמצאים באותו NAT וכי ניתן לקבוע חיבור מקומי, או יכול להיות ששני העמיתים עומדים מאחורי NAT סימטרי ודורש ממסר באמצעות שרת פנייה.
פרוטוקול תיאור הפעלה (SDP)
SDP הוא למעשה פורמט נתונים לתיאור מפגשי מדיה להודעת הפגישה, הזמנת מושבים וצורות אחרות של התחלת הפעלה. זהו תקן לתיאור תוכן המולטימדיה לחיבור, כגון רזולוציה, פורמטים, קודקים והצפנה.
חשוב מכך, זה’S משמש גם לתיאור מועמדי הקרח ואפשרויות רשת אחרות. כאשר Peer A רוצה להתחבר ל- Peer B, הם צריכים לשתף מידע על SDP כדי להתחבר. כיצד משותף SDP זה לגמרי – זה מכונה איתות ואנחנו נחקור אותו בהמשך.
איתות – הקמת חיבור
איתות הוא תהליך שליחת מידע בקרה בין שני מכשירים כדי לקבוע את פרוטוקולי התקשורת, הערוצים, קודקים ופורמטים של מדיה ושיטת העברת נתונים, כמו גם כל מידע ניתוב נדרש. הדבר החשוב ביותר לדעת על תהליך האיתות עבור WebRTC: זה לא מוגדר במפרט.
חיבורי עמיתים עוסקים בחיבור שני יישומים במחשבים שונים. חיבור נקבע באמצעות תהליך גילוי ומשא ומתן הנקרא איתות.
הערת אזהרה חשובה היא של- WebRTC אין איתות שנבנה כחלק מהמפרט, מכיוון שלא ניתן לשני מכשירים ליצור קשר ישיר זה עם זה, אותם בדקנו בפירוט קודם לכן. עבור שני עמיתים להתחבר באמצעות WebRTC, הם דורשים זה את נתוני ה- SDP של זה.
ככאלה, זה תלוי בך, כמפתח, לבסס דרך לשני מכשירים לשתף מידע זה. אפשרות פופולרית היא WebSockets, או שניתן לשלוח את מידע האיתות קדימה ואחורה דרך דוא”ל או למסור ברגל ולהזין אותם ידנית כדי ליצור חיבור.
לאחר שיתוף מידע זה, יש לך את כל מה שאתה צריך לשני עמיתים כדי ליצור חיבור WebRTC, זה עשוי להיות חיבור ישיר, או שזה יכול להיות דרך שרת פנייה.
מתי אתה צריך להשתמש ב- Webrtc?
אתה יכול אפילו לשאול: מדוע שאשתמש ב- WebRTC? זה נראה מסובך להבנה ומסובך עוד יותר להתקנה.
זה מסובך להגדיר, אבל יש המון יתרונות:
- ה- API קל לשימוש וזמין ישירות בדפדפן שלך.
- יש לו ביצועים טובים, מה שמאפשר להעביר תוכן רוחב פס גבוה, כגון וידאו או שמע.
- ניתן ליישם בקלות תכונות מתקדמות יותר, כגון שיתוף מסך ושיתוף קבצים.
- תומך בחיבור עמיתים לעמית עם חביון מופחת.
- קוד פתוח בחינם.
- אין איתות מובנה.
- אתה צריך לשמור על שרתי הלם ולהפוך.
- לחיבורים קבוצתיים (כגון שיחת וידאו קבוצתית) יתכן שיהיה צורך ב- SFU.
- מסובך להגדיר ולהבין.
מה עליכם לבחור?
הפרוטוקול שתבחר יהיה תלוי בצרכים הספציפיים שלך.
Http: עם HTTP/2, כעת ניתן לקבל תקשורת דו כיוונית בין לקוח לשרת. תלוי ביישום שלך יתכן שלא תזדקק לתקשורת דופלקס מלאה ומשהו כמו SSE יהיה די והותר. גילינו גם במאמר זה כי WebSockets ו- GRPC נשענים על HTTP, ואילו WEBRTC דורש ערוץ אחר לאיתות. זה’S שווה לחקור תחילה אם HTTP פותר את צרכי היישום שלך לפני שאתה מתעמק בפרוטוקולים אחרים אלה.
WebSockets מתאימים ביותר ליישומים בזמן אמת הזקוקים לתקשורת דו כיוונית, כגון יישומי צ’אט. הם גם קלים יחסית להתקנה ולהשתמש בהם. עם זאת, WebSockets אינם יעילים כמו GRPC או WEBRTC, והם אינם מתאימים היטב ליישומים שצריכים לשלוח נתונים רבים.
GRPC הוא פרוטוקול יעיל יותר מ- WebSockets, והוא מתאים יותר ליישומים שצריכים לשלוח נתונים רבים. עם זאת, GRPC מסובך יותר להתקנה ולהשתמש בהן מאשר WebSockets. אם אתה צריך לבצע שיחות API קטנות רבות, GRPC היא בחירה טובה. לחלופין, כשאתה מיישם שירותי מיקרו עם שפות תכנות שונות שצריכות לתקשר, ואז GRPC’S Sedialted Data ו- Depart. זה’כדאי גם לציין שאתה יכול’לא להשתמש בקלות ב- GRPC מהדפדפן. לשם כך, אתה זקוק לפרוקסי ייעודי ב Backend שלך שמתרגם שיחות – ראה GRPC -Web.
Webrtc הוא הפרוטוקול היעיל ביותר לתקשורת בזמן אמת עם חביון נמוך בין דפדפנים למכשירים, והוא מתאים היטב ליישומים שצריכים לשלוח נתונים רבים. WebRTC מספק גם ממשק API קל לשימוש הזמין ישירות בדפדפן, מה שמקל על שיתוף המצלמה, האודיו, המסך או הקבצים האחרים שלך. עם זאת, WebRTC יכול להיות מסובך להתקנה ולהשתמש בו מכיוון שהוא מחייב אותך לבצע את האיתות ולשמירה על שרת סיבוב ושרת הלם.
סיכום
העתיד יראה יותר פרוטוקולים, שינויים ושיפורים נוספים. HTTP/3 כבר משוחרר ויש גם פרוטוקול תקשורת חדש בשם WebTransport, תחליף פוטנציאלי ל- WebSockets.
אנו מקווים שמצאת את המאמר הזה מועיל וכי הוא יעזור לך לקבל החלטה מושכלת. אם אתה רוצה להמשיך בדיון, פנה אלינו בטוויטר או בלינקדאין.
Webrtc לעומת HLS: השוואה בין פרוטוקולי סטרימינג
פוסט בבלוג זה משווה בין WebRTC ו- HLS, שניים מפרוטוקולי הסטרימינג הפופולריים ביותר. הוא בוחן את היתרונות והחסרונות של כל פרוטוקול ובוחן את היישומים שלו. בנוסף, הפוסט מספק סקירה כללית שעולה על סטרימינג, מה שמאפשר לקוראים לבחור את הטכנולוגיה הנכונה לצרכים שלהם.
Ashik TS
22 בפברואר 2023
בעידן הדיגיטלי של ימינו, פרוטוקולי הזרמה הפכו חיוניים לצריכה ושיתוף מדיה. מזרמים חיים לווידיאו לפי דרישה, פרוטוקולי הזרמה אפשרו לנו לגשת לתוכן בכל מקום ובכל עת. אבל עם כל כך הרבה אפשרויות זמינות, לדעת מה הכי טוב לצרכים שלך יכולה לקחת זמן ומאמץ. במאמר זה נסתכל על שניים מפרוטוקולי הסטרימינג הפופולריים ביותר: WebRTC ו- HLS, השווה אותם ונעזור לך לקבל החלטה מושכלת.
מה זה webrtc?
WebRTC הוא פרוטוקול חופשי וקוד פתוח שפותח על ידי ה- W3C. זה מאפשר תקשורת בזמן אמת, כמו שיחות קול ווידאו, ועידות מקוונות וצ’אט. WebRTC הפכה לבולטת לאחרונה בגלל יכולתה לספק זרמי וידיאו ושמע באיכות גבוהה, באיכות גבוהה.
יישומים של WebRTC
להלן כמה ממקרי השימוש הנפוצים ביותר של WebRTC:
- שיחות קול ווידאו: אחד ממקרי השימוש הפופולריים ביותר עבור WebRTC הוא שיחות הקול והווידיאו. זה מאפשר תקשורת בזמן אמת ונמוכה בין שני אנשים או יותר. עסקים משתמשים בתכונה זו באופן נרחב לתקשורת פנימית, שיתוף פעולה ואפליקציות הפונות לצרכן לרשתות חברתיות ותארוך מקוון.
- ועידה מקוונת: מקרה שימוש פופולרי נוסף עבור WebRTC הוא ועידה מקוונת. זה מאפשר למשתמשים מרובים להצטרף לחדר ישיבות וירטואלי ולקיים אינטראקציה זה עם זה באמצעות וידאו ושמע, כמו גם לשתף מסכים ומסמכים. עסקים משתמשים בתכונה זו באופן נרחב לפגישות ומצגות מרוחקות, כמו גם על ידי מוסדות חינוך לשיעורים והרצאות מקוונות.
- לְשׂוֹחֵחַ: WebRTC מאפשר גם תקשורת מבוססת טקסטים בזמן אמת באמצעות צ’אט. ניתן לשלב תכונה זו באפליקציות ופלטפורמות שונות, כגון רשתות חברתיות, משחק מקוון ותמיכת לקוחות. זה מאפשר תקשורת מיידית וניתן להשתמש בו כדי לשפר את חווית המשתמש בהקשרים שונים.
מה זה HLS?
HLS (HTTP Live Streaming) הוא פרוטוקול הזרמת קצב סיביות אדפטיבי שפותח על ידי Apple. הוא נמצא בשימוש נרחב לסטרימינג חי במכשירים ניידים ודפדפני שולחן עבודה. HLS נועד לעבוד עם פרוטוקול HTTP וניתן לשלב אותו בקלות בתשתית מבוססת HTTP קיימת.
יישומים של HLS
להלן כמה מהדרכים הנפוצות יותר משתמשים ב- HLS בימינו של ימינו:
- סטרימינג בשידור חי: HLS נמצא בשימוש נרחב לאירועים בהזרמת חיים, כמו ספורט, קונצרטים ושידורי חדשות. הפרוטוקול נועד לטפל בתנועה גבוהה ולספק חווית סטרימינג חלקה לצופים. תכונת קצב הסיביות האדפטיבית מאפשרת לזרם להסתגל לחיבור האינטרנט של הצופה, ומספקת חווית צפייה טובה יותר.
- וידאו לפי דרישה (VOD): HLS משמש בדרך כלל גם לתוכן וידאו לפי דרישה (VOD), כמו סרטים, תכניות טלוויזיה ומדריכי וידאו. הפרוטוקול מאפשר שילוב קל עם מערכות ניהול תוכן וחווית סטרימינג חלקה עבור הצופה עם קצב סיביות אדפטיבי.
- IPTV ו- OTT: HLS משמש גם בשירותי IPTV ובשירותי Over-the Top (OTT), כגון סטרימינג טלוויזיה ווידאו שירותי וידאו. היכולת של הפרוטוקול להתמודד עם תנועה גבוהה ולספק חווית סטרימינג חלקה הופכת אותו לבחירה פופולרית עבור יישומים אלה.
- סטרימינג לנייד: HLS פופולרי גם לסטרימינג סלולרי שכן הוא נתמך גם בפלטפורמות iOS וגם באנדרואיד.
- תקשורת ארגונית: HLS משמש בפלטפורמות תקשורת ארגוניות המאפשרות לעובדים להזרים סרטונים, לשתף מסכים ולבצע שיחות שמע/וידאו מכיוון שהוא מספק חווית הזרמה חלקה ותואמת את מרבית המכשירים.
Webrtc לעומת HLS: השוואה מפורטת
תכונה | Webrtc | HLS |
---|---|---|
תמיכה בדפדפן | Chrome, Firefox, Safari, Edge (עם תוסף) | ספארי, כרום, קצה, פיירפוקס (עם תוסף) |
תמיכה במכשירים | Windows, MacOS, Linux, iOS, Android | iOS, Android, MacOS, Windows |
תמיכה בקודק | VP8, VP9, H.264, ח.265 | ח.264, ח.265 |
חֶבִיוֹן | נָמוּך | גָבוֹהַ |
בִּטָחוֹן | גָבוֹהַ | בינוני |
איכות וידאו | גָבוֹהַ | גָבוֹהַ |
שיטת אספקה | עמיתים לעמית | מבוסס שרת |
מדרגיות | גָבוֹהַ | גָבוֹהַ |
תְאִימוּת | מוגבל | רָחָב |
כאשר מחליטים באיזה פרוטוקול להשתמש, חשוב לקחת בחשבון גורמים כמו חביון, אבטחה, איכות וידאו, שיטת משלוח, מדרגיות ותאימות.
חֶבִיוֹן
כשמדובר בחביון, ל- WebRTC יש יתרון ברור על פני HLS. WebRTC משתמש בתקשורת בזמן אמת, כלומר הסרטון מועבר מייד לצופה. מצד שני, HLS משתמשת במנגנון חיץ, המעכב את משלוח הווידיאו. תלוי בתנאי הרשת, עיכוב זה יכול להיות בכל מקום בין מספר שניות למספר דקות. אלמנטים אלה הופכים את WebRTC למתאימים יותר למקרי שימוש הדורשים חביון נמוך, כגון צ’אט וידאו חי ומשחקים מקוונים.
בִּטָחוֹן
גם WebRTC וגם HLS משתמשים בהצפנה כדי לאבטח זרמי וידיאו. עם זאת, רמת האבטחה המסופקת על ידי כל פרוטוקול שונה. WebRTC משתמש בפרוטוקול ההובלה המאובטח בזמן אמת (SRTP) כדי להצפין את זרם הווידיאו, שנחשב לאחת משיטות ההצפנה המאובטחות ביותר. מצד שני, HLS משתמש בפרוטוקול HTTP Secure (HTTPS) כדי להצפין את זרם הווידיאו. בעוד ש- HTTPS נחשב לאובטח, SRTP פחות מאובטח. בגלל הסיבות הללו, WebRTC מתאים יותר למקרי שימוש הדורשים רמות ביטחון גבוהות, כמו עסקאות פיננסיות ותקשורת ממשלתית.
איכות וידאו
גם WebRTC וגם HLS מסוגלים לספק וידאו באיכות גבוהה. עם זאת, איכות הווידיאו המועברת על ידי כל פרוטוקול יכולה להשתנות בהתאם לתנאי הרשת. WebRTC משתמש בזרם קצב סיביות אדפטיבי, המתאים את איכות הווידיאו בזמן אמת על סמך תנאי הרשת של הצופה. המשמעות היא שאיכות הווידיאו תהיה גבוהה אפילו ברשתות רוחב פס נמוך. מצד שני, HLS משתמשת במנגנון משלוח וידאו מראש, שיכול להוביל לחיצות ולגמגם ברשתות רוחב פס נמוך. כתוצאה מכך, WebRTC מתאים יותר למקרי שימוש הדורשים וידאו באיכות גבוהה ברשתות רוחב פס נמוך.
שיטת אספקה
WEBRTC ו- HLS משתמשים בשיטות משלוח שונות כדי להזרים וידאו. WebRTC משתמש בשיטת משלוח עמיתים לעמית (P2P), מה שאומר שהסרטון מועבר ישירות מצופה אחד למשנהו. זה מקטין את עומס השרת ומגדיל את מדרגיות זרם הווידיאו. מצד שני, HLS משתמשת בשיטת אספקת שרת לקוח, מה שאומר שהסרטון מועבר מהשרת לצופה. זה יכול להוביל לבעיות מדרגיות, במיוחד בזמני תנועה שיא. כתצה.
מדרגיות
ל- WebRTC ו- HLS יש מאפייני מדרגיות שונים. WebRTC משתמש בשיטת משלוח P2P, שמפחיתה את עומס השרת ומגדילה את מדרגיות זרם הווידיאו. מצד שני, HLS משתמשת בשיטת אספקת שרת לקוח, שיכולה להוביל לבעיות מדרגיות, במיוחד בזמני תנועה שיא. כתצה.
תְאִימוּת
ל- WebRTC ו- HLS יש מאפייני תאימות שונים. WebRTC תואם לרוב הדפדפנים המודרניים, כולל כרום, פיירפוקס וספארי. עם זאת, זה לא תואם ל- Internet Explorer ו- Edge. מצד שני, HLS תואם לרוב הדפדפנים המודרניים, כולל Chrome, Firefox, Safari, Internet Explorer ו- Edge. בגלל זה, HLS מתאים יותר למקרי שימוש הדורשים תאימות למגוון רחב של דפדפנים ומכשירים.
Webrtc לעומת HLS: וזה עדיף?
Webrtc היא אפשרות נהדרת ליישומי סטרימינג בזמן אמת, זרימה בזמן אמת. זה מושלם למקרי שימוש כמו שיחות קול ווידאו, ועידה מקוונת וצ’אט. מצד שני, HLS היא אפשרות מצוינת לזרמת סרטון חי לקהל גדול. זה מתאים במיוחד למקרי שימוש כמו הזרמת ספורט חי, קונצרטים ואירועים אחרים הדורשים מדרגיות גבוהה. היכולת של HLS להסתגל לתנאי רשת שונים הופכת אותה לבחירה פופולרית לזרמת תוכן לצופים במכשירים ורשתות שונות.
בנוסף, ל- HLS יש תמיכה טובה יותר בהגנה על זכויות היוצרים של התוכן, מה שהופך אותו לבחירה מועדפת לזרמת תוכן פרימיום. כשמדובר בתאימות, ל- HLS יש יתרון קל מעל webrtc. HLS נתמך באופן נרחב, מה שהופך אותו לאפשרות מגוונת יותר לזרמת תוכן לקהל רחב יותר. עם זאת, זה מגיע במחיר של חביון מעט גבוה יותר.
אם המוקד העיקרי שלך הוא זרם בזמן אמת, נמוך-לגישות, WebRTC עשוי להיות האפשרות הטובה ביותר שלך. אחרת, אם המיקוד העיקרי שלך הוא במדרגיות ותאימות, אז HLS עשוי להיות הבחירה הטובה יותר.
סיכום
לסיכום, גם ל- WebRTC וגם ל- HLS יש תכונות ייחודיות משלהם ומקרים שהופכים אותם למתאימים לסוגים שונים של סטרימינג. WebRTC מתאים ביותר לתקשורת נמוכה, תקשורת בזמן אמת כמו שיחות קול ווידאו, ועידות מקוונות וצ’אט. מצד שני, HLS מתאימה ביותר לזרם איכותי של סרטונים שהוקלטו מראש במגוון רחב של מכשירים.
שאלות נפוצות
1. האם WebRTC משתמש ב- TCP או UDP?
WebRTC משתמש גם ב- TCP וגם ב- UDP בהתאם לסוג הנתונים המועברים. הוא משתמש ב- TCP לבקרת הודעות ו- UDP לזרמת מדיה.
2. האם YouTube משתמש ב- HLS?
כן, YouTube משתמש ב- HLS (Streaming Live Live) כאחד מפרוטוקולי הסטרימינג שלה כדי לספק סרטונים לצופים.
3. הוא webrtc רק לדפדפנים?
WebRTC היא בעיקר טכנולוגיה מבוססת דפדפן, אך ניתן להשתמש בה גם באפליקציות מקוריות דרך ספריות webrtc.
4. האם נטפליקס משתמשת ב- webrtc?
לא, נטפליקס לא משתמשת ב- WebRTC לסטרימינג. הם משתמשים בטכנולוגיה קניינית משלהם הנקראת סטרימינג אדפטיבי מעל HTTP (ASOH) המבוססת על Streaming Live HTTP (HLS).