האם WhatsApp משתמש ב- MQTT
האם WhatsApp משתמש ב- MQTT
מאחורי הקלעים של יישומי צ’אט
יש הרבה יישומי צ’אט בשימוש, אך רק מעטים מהם בולטים בגלל התכונות שהם נושאים, שמושכים משתמשים. שתיים מאפליקציות הצ’אט הטובות ביותר נחשבות ל- Messenger ו- WhatsApp. למרות שחברות אלה דיסקרטיות ביחס לארכיטקטורת היישומים שלה. זהו הרכב שלהם, וניתן להתעדכן עובדות אלה מכיוון שכל היישומים הללו נוטים להתעדכן לעתים קרובות.
1. מסנג’ר בפייסבוק
Messenger של פייסבוק הוא אחד מיישומי הצ’אט הפופולריים ביותר. לפני כמה שנים, המסנג’ר לא היה במצב הטוב ביותר שלו. השימוש בביצועים והחלל שלו התחילו לפגר מאחור. המסנג’ר השתמש במודל מבוסס משיכה. בכל פעם שהאפליקציה הוכרה בהודעת דחיפה קלה על זמינות ההודעות החדשות, ואז האפליקציה הייתה מושכת ותקבל תגובה כבדה של JSON המכילה את תצוגת השיחה. אך מאוחר יותר, Messenger עודכן כדי להשתמש במודל תמונת מצב מבוסס דחיפה + דלתא.
נקודות מפתח:
- למסנג’ר היו בעבר בעיות ביצועים ושימוש בחלל.
- תחילה הוא השתמש במודל מבוסס משיכה לאחזור הודעות.
- מאוחר יותר הוא עבר לדגם תמונת מצב מבוסס דחיפה + דלתא.
שאלות:
- מה היו הבעיות עם Messenger בתחילה?
- לאיזה דגם עבר Messenger לצורך אחזור ההודעות?
תשובות:
- למסנג’ר היו בעיות שימוש ושימוש בחלל.
- Messenger עבר מדגם מבוסס משיכה לדגם תמונת מצב מבוסס דחיפה + דלתא.
2. WhatsApp
WhatsApp מבוסס על ערימת Lyme/Lyce.
בתוך מאחורי הקלעים של WhatsApp, אחד הדברים המרתקים והחשובים ביותר הוא הנדנדה שנכתבה בארלנג. לארלנג יש תרומה עצומה להפיכת WhatsApp לאחת מאפליקציות הצ’אט הטובות בעולם.
“למה ארלנג?”
ארלנג היא שפת תכנות פונקציונלית לשימוש כללי, במקביל, במקביל. אזורים שבהם ידוע שארלנג מועיל מטפלים בחיבורים והודעות ניתוב רבות בהינתן היבטים מסוימים של ההודעה. מכיוון שארלנג מציג ביצועים נהדרים בתרחישים אלה, רוב היישומים הקשורים לתקשורת משתמשים ב- ERLANG ביישום שלהם.
היישום הראשוני של שרת WhatsApp נעשה באמצעות ejabberd, שהוא שרת העברת מסרים מיידי של קוד פתוח/XMPP שנכתב ב- Erlang. פרוטוקול ההודעות המשמש ליישום הוא XMPP (פרוטוקול העברת הודעות ונוכחות הניתנות להרחבה).
היבט חשוב נוסף של יישום צ’אט הוא בסיס הנתונים. רוב הזמן, מסד הנתונים יכול להפוך לצוואר בקבוק ביצועים באפליקציות העברת הודעות בזמן אמת. WhatsApp משתמש במינציה, שידוע כ- DBMS תקשורת מבוזרת בזמן אמת. אחד ההיבטים החשובים של המנסיה הוא שניתן להגדיר אותו מחדש בזמן ריצה.
למרות ש- WhatsApp נחשב לפשוט למדי בהשוואה לשירותי מסנג’ר כמו פייסבוק מסנג’ר, העיצוב שלו אינו פשוט. התרשים הבא מציג תצוגה מופשטת מאוד של ארכיטקטורת WhatsApp.
אוטומציה ביתית מבוססת WhatsApp: גישור פרוטוקול עם MQTT
במאמר זה אנו נהיה בשליטה על מכשירים שאינם תומכים ב- WhatsApp אלא תומכים בפרוטוקולי תקשורת אחרים כמו MQTT, TCP, IMAP וכו ‘. אם מתקין בית עם מכשירי אוטומציה ביתיים שאינם תומכים ב- WhatsApp, אנו נתקשר עם מכשירים אלה (בקרים) באמצעות פרוטוקולים הנתמכים על ידי מכשירים אלה. לפיכך, נוכל לשלוט במכשירי בית המחוברים למכשירים אלה.
רכיבים נדרשים:
- API Whatsapp מבוסס Python – Yowsup
- ספריית MQTT – PAHO
- מזהה פיתון
- Arduino Ide
תובנות טכניות:
גישור פרוטוקול יכול גם לשלוט במכשירים שאינם תומכים ב- WhatsApp API. המשמעות היא שנשלח את הנתונים מפרוטוקול אחד למשנהו. מאמר זה ידגים MQTT ו- WhatsApp Bridge כדי לשלוט במכשירים.
תרשים בלוקים:
כל התקשורת תהיה באמצעות סקריפט Python, המותקן במערכת מבוססת לינוקס. לתסריט Python יהיה ספריית API ו- MQTT של WhatsApp כדי לתקשר עם שני הפרוטוקולים. התסריט יכול לשלוח ולקבל הודעות ב- WhatsApp ו- MQTT.
שאלות:
- מהם הרכיבים הנדרשים לאוטומציה ביתית מבוססת WhatsApp עם MQTT?
- מה המטרה של גישור פרוטוקול באוטומציה ביתית?
תשובות:
- הרכיבים הנדרשים לאוטומציה ביתית מבוססת WhatsApp עם MQTT הם API WhatsApp מבוסס Python (Yowsup), MQTT Library (PAHO), ID Python ו- Arduino IDE.
- גישור פרוטוקול מאפשר תקשורת ובקרה של מכשירים שאינם תומכים ב- WhatsApp ממשק API על ידי שליחת נתונים מפרוטוקול אחד (ה.ז., Mqtt) לאחר.
האם WhatsApp משתמש ב- MQTT
לאחר שהחיבור מצליח, אנו יכולים לשלוח הודעות באמצעות זה
לְפַרְסֵם.יחיד (נושא, הודעה_data, hostname =”סַרְסוּר.HIVEMQ.com”)
מאחורי הקלעים של יישומי צ’אט
יש הרבה יישומי צ’אט בשימוש. אבל רק מעטים מהם בולטים בגלל התכונות שהם נושאים שמושכים את המשתמשים. שתיים מאותן אפליקציות צ’אט הטובות ביותר נחשבות למסנג’ר של פייסבוק ו- WhatsApp. למרות שחברות אלה נפרדות בנוגע לארכיטקטורת היישומים שלה. זהו הרכב שלהם וניתן להתעדכן עובדות אלה מכיוון שכל היישומים הללו נוטים להתעדכן לעתים קרובות.
1. מסנג’ר בפייסבוק
פייסבוק’S Messenger הוא אחד מיישומי הצ’אט הפופולריים ביותר. כמה שנים אחורה, המסנג’ר היה’t על זה’הצורה הטובה ביותר. זה’השימוש בביצועים ושימוש בחלל התחילו לפגר מאחור. המסנג’ר השתמש במודל מבוסס משיכה. בכל פעם, האפליקציה הוכרה בהודעת דחיפה קלה על זמינותן של הודעות חדשות ואז האפליקציה הייתה מושכת ותקבל תגובה כבדה של JSON המכילה את תצוגת השיחה. אולם מאוחר יותר עודכן Messenger כדי להשתמש במודל תמונת מצב מבוסס דחיפה + דלתא.
MQTT הוא פרוטוקול קישוריות מכונה למכונה (M2M). זה תוכנן כתובלה בהעברת הודעות פרסום/מנוי קל במיוחד – MQTT.אורג
שינוי מעניין נוסף שנעשה בתשתית Messenger הוא עובר מ- JSON ל- חִסָכוֹן. השינוי העיקרי הזה גרם להפחתה בגודל העומס ב- 50%.
נערכו שיפורים משמעותיים גם בצד Sect. מוקדם יותר נכתבה כל הודעה לשכבת אחסון מסורתית לפני ששלחה למסנג’ר טריגר לקרוא את ההודעה מרוב האחסון שהפך את הגודל לבעייתי. אולם התהליך הוחלף לחלוטין באמצעות יישום תור מסודר שנוצר על ידי פייסבוק עצמה בשם “קַשׁתִית”. אחד המאפיינים המעניינים של איריס הוא השימוש במצביעים שמאפשר סנכרון הודעות בין מסנג’ר לרובד האחסון. התמונה הבאה מראה בבירור כיצד מתרחשת סנכרון הודעות ב- Messenger
הנוהל שתואר לעיל הצליח להסיר את התלות של מסירת ההודעות בזמינות ומהירות הכתיבה של שכבת האחסון הנמצאת בשימוש. איריס מאחסן את ההודעות באופן זמני בתוכו’אחסון גיבוי עד שכל ההודעות מסונכרנות כראוי.
עובדה מעניינת נוספת היא שאחסון הגיבוי של איריס נבנה באמצעות MySQL ו- Flash.
2. WhatsApp
WhatsApp מבוסס על ערימת Lyme/Lyce.
בתוך הקלעים מאחורי WhatsApp, אחד הדברים המרתקים והחשובים ביותר הוא הנדנדה שנכתבה בארלנג. לארלנג יש תרומה עצומה להפיכת WhatsApp לאחת מאפליקציות הצ’אט הטובות בעולם.
למה ארלנג ?
ארלנג היא שפת תכנות פונקציונלית לשימוש כללי, במקביל, במקביל. אזורים שבהם ידוע שארלנג מועיל
> טיפול בחיבורים רבים
> ניתוב הודעות שניתנו כמה היבטים של ההודעה
מכיוון שארלנג מציג הופעה נהדרת בתרחישים הנתונים שרוב היישומים הקשורים לטלקומוניקציה משתמשים ב- ERLANG ביישום שלהם.
היישום הראשוני של שרת WhatsApp נעשה באמצעות ejabberd. שהוא שרת הודעות מיידי של קוד פתוח/XMPP כתוב בארלנג. פרוטוקול ההודעות המשמש ליישום הוא XMPP (פרוטוקול העברת הודעות ונוכחות הניתנות להרחבה).
היבט חשוב נוסף של יישום צ’אט הוא בסיס הנתונים. רוב הפעמים, מסד הנתונים יכול להפוך לצוואר בקבוק ביצועים באפליקציות העברת הודעות בזמן אמת. WhatsApp משתמש במינציה שידוע כ- DBMS תקשורת מופצת בזמן אמת. אחד ההיבטים החשובים של המנסיה הוא שניתן להגדיר אותו מחדש בזמן ריצה.
למרות ש- WhatsApp נחשב לפשוט למדי בהשוואה לשירותי המסנג’ר כמו פייסבוק מסנג’ר, זה’S Design isn’לא פשוט. התרשים הבא מציג תצוגה מופשטת מאוד של ארכיטקטורת WhatsApp,
אוטומציה ביתית מבוססת WhatsApp: גישור פרוטוקול עם MQTT
במאמר זה אנו נהיה בשליטה על מכשירים שאינם תומכים ב- WhatsApp אלא תומכים בפרוטוקולי תקשורת אחרים כמו MQTT, TCP, IMAP וכו ‘. אם מתקין בית עם מכשירי אוטומציה ביתיים שאינם תומכים ב- WhatsApp, אנו נתקשר עם מכשירים אלה (בקרים) באמצעות פרוטוקולים הנתמכים על ידי מכשירים אלה.
לפיכך, נוכל לשלוט במכשירי בית המחוברים למכשירים אלה.
רכיבים נדרשים
כלים נדרשים/ ספריות נדרשות
API WhatsApp מבוסס Python-Yowsup
ספריית MQTT – PAHO
מזהה פיתון
Arduino Ide
תובנות טכניות
גישור פרוטוקול יכול גם לשלוט במכשירים שאינם תומכים ב- WhatsApp API. המשמעות היא שנשלח את הנתונים מפרוטוקול אחד למשנהו. מאמר זה ידגים MQTT ו- WhatsApp Bridge כדי לשלוט במכשירים.
תרשים בלוקים
איור 1 איור 1 גישור פרוטוקול WhatsApp ו- MQTT
כל התקשורת תהיה באמצעות סקריפט Python, המותקן במערכת מבוססת לינוקס. לתסריט Python יהיו ספריית API ו- MQTT של WhatsApp כדי לתקשר עם שני הפרוטוקולים.
התסריט יכול לשלוח ולקבל הודעות ב- WhatsApp ו- MQTT.
בקר מיקרו (Atmega 328p) מחובר למכשירי הבית דרך מעגלי ממסר. למטרות תקשורת, ה- ESP מחובר למיקרו -בקר.
ה- ESP מותקן עם קוד שמקבל הודעות בנושא ספציפי ושולח פקודות למיקרו -בקר דרך UART סדרתי.
לכן, עכשיו כאשר כל משתמש שולח הודעות ב- WhatsApp, זה עובר לבקר המיקרו דרך סקריפט Python שלנו.
תרשים מעגלים
לוח זה מחובר למתג תאורה עם מעגל ממסר. אנו יכולים גם לקחת את הלוח של Arduino Uno במקום הלוח המותאם אישית שלנו 328.
איך המערכת עובדת
כאשר משתמש שולח הודעה למערכת הלינוקס שלנו ב- WhatsApp, הסקריפט קורא את ההודעה. מכשיר ה- IoT, התומך בפרוטוקול MQTT, מקשיב להודעות בנושא ספציפי. הודעות אלה פקדו על המכשיר כדי להפעיל ולכבות מכשיר.
אז עכשיו ההודעות שנקראו על ידי סקריפט Python נסרקות לפקודות אם נמצאות. פקודות ספציפיות נשלחות למכשיר בפרוטוקול MQTT. כאשר המכשיר קורא את הפקודות הללו, הוא פועל עליהן על ידי הפעלת סיכות גבוהות (מופעלות), נמוכות (כבוי)
הבנת קוד המקור
יש לנו שני סוגים של קוד מקור, אחד עבור Arduino + ESP ואחד אחר לסקריפט Python המותקן בלינוקס.
קוד לארדואינו
Arduino מותקן עם קוד שמקבל נתונים על סדרה. כאשר מתקבל סטרנג ספציפי כמו “עַל” זה יהפוך את סיכת הממסר (גבוה) ובהתקלה “כבוי” זה מכבה את הממסר.
אם (rec == “עַל”)
DigitalWrite (ממסר, גבוה);
סידורי.הדפס(“הממסר פועל”);
rec = “”;
>
אם (rec == “כבוי”)
DigitalWrite (ממסר, נמוך);
סידורי.הדפס(“הממסר כבוי”);
rec = “”;
>
קוד עבור במיוחד
ESP מחובר ל- Arduino ביציאה סדרתית וגם נרשם בנושא MQTT כדי לקבל ממנו נתונים. בעיקרון, זה שולח את הנתונים שהתקבלו בנושא MQTT ליציאה הסדרתית ולנתונים מהסידרה לנושא MQTT.
כדי לדעת יותר על ESP ו- MQTT, עיין במאמרים הקודמים שלנו.
קוד לסקריפט Python
סקריפט Python מותקן עם “Yowsup” WhatsApp API לקריאה ולשלוח הודעות מ- WhatsApp. ישנם שני קבצים בסקריפט זה לָרוּץ.PY וכן שִׁכבָה.PY.
הבנת הפעלת קבצים.PY
אנו נקרא לספריות שלנו בראש הקובץ
מ- Yowsup.ערימות מייבאות yowstackbuilder
מ- Yowsup.שכבות.ייבוא Auth Autherror
מ- Yowsup.שכבות מייבאות yowlayerevent
מ- Yowsup.שכבות.ייבוא רשת YownetWorkLayer
מ- Yowsup.env ייבוא yowsupenv
אנו נקשר גם את קובץ השכבה בחלק העליון מכיוון שהכיתה העיקרית “Echolayer” קיים בתוך הקובץ הזה.
משכבה של ייבוא שכבה
אנו יכולים לקרוא לקובץ השכבה כל דבר, אך עלינו לשים את אותו שם כאן.
בתוך ה PY, אנו נצהיר על המשתנה העיקרי שלנו לסיסמא ואירועים שאנו רוצים להתרחש.
אישורים = (“91xxxxxxxxxx”, “HKHWVW5/WNR493HXK8NKL/HTPNO =”)
עכשיו אנו מעבירים אותם לשכבה ובונים את הערימה. כמו כן, לולאה שתשמור על החיבור בשידור חי נקראת.
לַעֲרוֹם.SetCredential (אישורים)
לַעֲרוֹם.BroadcastEvent (YowlayerEvent (YownetWorkLayer.Event_state_connect)) #הוצאת אות Connect
לַעֲרוֹם.לולאה () #זו התוכנית Mainloop
הבנת שכבת קבצים.PY
קובץ זה מכיל את ספריית הפרוטוקול עבור MQTT ומסוגל לקבל הודעות מ- WhatsApp.
הבנת כיצד מתקבלות הודעות מ- WhatsApp
קובץ זה מכיל את הכיתה שתקבל כל הודעות שנכנסות למספר זה, וזה יהיה ישות התקשרות חוזרת כך שניתן להפעיל כל לולאה אחרת בתוך הקובץ.
@Protocolingcallback (“הוֹדָעָה”)
def onMessage (עצמי, מסג -פרוטוקולציה):
אם זה נכון:
ניתן להשיג נתוני הודעות וטופס מספר ממנו הגיעה ההודעה להלן.
incomming_message_data = messageprotocolentity.getbody ()
זה יקבל את גוף ההודעה שהוא המסר האמיתי. זה יאחסן במשתנה מחרוזת “incomming_message_data”
incomming_message_sender = messageprotocolentity.לקבל מ()
שורה זו תאחסן את מספר איש הקשר של ההודעה הנכנסת במשתנה המחרוזת “incomming_message_sender”
הבנת שכבות ה- MQTT לשליחה וקבלה
ראשית, אנו נובא ספריות הנחוצות ל- MQTT.
יבוא פאהו.MQTT.לקוח כ- MQTT
יבוא פאהו.MQTT.לפרסם כפרסום
כעת נצהיר על משתנה בשם לקוח עם לקוח MQTT.
לקוח = MQTT.לָקוּחַ()
כעת נבצע שני התקשרות פונקציות 1. לקבלת הודעות, 2. עושה משהו בחיבור מצליח.
לָקוּחַ.on_connect = on_connect
לָקוּחַ.on_message = on_message
לבסוף, נתחבר למתווך MQTT ביציאה, ונתחיל את הלקוח בתוך לולאה ללא חסימה
לָקוּחַ.לְחַבֵּר(“סַרְסוּר.HIVEMQ.com”, 1883, 60)
לָקוּחַ.LOOP_START ()
לאחר שהחיבור מצליח, אנו יכולים לשלוח הודעות באמצעות זה
לְפַרְסֵם.יחיד (נושא, הודעה_data, hostname =”סַרְסוּר.HIVEMQ.com”)
כאשר מתקבלת הודעה כלשהי ב- WhatsApp, היא מאוחסנת במחרוזת ואז סריקה את המחרוזת הזו עבור כמה מילות מפתח המגדירות את ההודעה הזו כפקודה להפעלת האור/כיבוי.
אליף (“אורות דלוקים” ב- incomming_msg): #do משהו בהתאמה
אם המצב מתאים, אנו שולחים את פקודת הבקרה למתווך MQTT.
לְפַרְסֵם.יחיד(“TS/Light”, “עַל”, שם מארח =”סַרְסוּר.HIVEMQ.com”)
כאשר התקבלה הודעה לא מוכרת, ההודעה ב- WhatsApp עונה שזה לא תקף.
וככה אנו יכולים להשתמש בגישור פרוטוקול כדי לשלוט במכשירי WhatsApp.
XANECS/AXIOM
התחייבות זו אינה שייכת לשום סניף במאגר זה, והיא עשויה להשתייך למזלג מחוץ למאגר.
החלף ענפים/תגיות
תגי סניפים
לא יכול היה להעמיס ענפים
אין מה להראות
לא יכול היה לטעון תגיות
אין מה להראות
שם כבר נמצא בשימוש
תג כבר קיים עם שם הסניף שסופק. פקודות GIT רבות מקבלות שמות תגיות וגם סניפים, ולכן יצירת סניף זה עלולה לגרום להתנהגות בלתי צפויה. האם אתה בטוח שאתה רוצה ליצור את הענף הזה?
בטל צור
- מְקוֹמִי
- מרחבי קוד
Https github cli
השתמש ב- Git או Checkout עם SVN באמצעות כתובת האתר האינטרנט.
לעבוד מהר עם ה- CLI הרשמי שלנו. למידע נוסף על ה- CLI.
נדרשת חתימה
אנא היכנס לשימוש ב- Codespaces.
השקת שולחן העבודה של GitHub
אם שום דבר לא קורה, הורד את שולחן העבודה של Github ונסה שוב.
השקת שולחן העבודה של GitHub
אם שום דבר לא קורה, הורד את שולחן העבודה של Github ונסה שוב.
הפעלת xcode
אם שום דבר לא קורה, הורד xcode ונסה שוב.
השקת קוד Visual Studio
מרחב הקוד שלך ייפתח לאחר שתוכן.
הייתה בעיה להכין את מרחב הקוד שלך, אנא נסה שוב.
התחייבות אחרונה
סטטיסטיקות GIT
קבצים
נכשלה לטעון מידע על התחייבות אחרונה.
הודעת התחייבות אחרונה
התחייב זמן
תקרא אותי.MD
Axiom היא תוכנית Python שמתחברת לשרת MQTT ומספקת ממשק לשירות ההודעות WhatsApp.
- שיבטו את הריפו הזה.
- התקן תלות
PIP התקן את yowsup2 paho-mqtt
- ערוך WASERVER/config.PY . אישורים יכולים להידרש מ- yowsup2 cli. ראה כאן.
- לָרוּץ
שרת פיתון/שרת.PY
- צור שרת/config-prod.PY
- בנה את התמונה עם Dockerfile המסופק . קבצי התצורה הנפרדים מאפשרים תצורות DEV/ייצור שונות.
לקבלת הודעות להירשם ל- WhatsApp/נכנס . הודעה תיראה כך:
< "טלפון": "4915112345678", "הוֹדָעָה": "שלום מאדם!" >
מספר טלפון בדוגמה זו יאוים בדרך כלל +49 151 12345678 . עבור הודעות קבוצתיות, מספר הטלפון נמצא בטופס 4915112345678-1400000000 (מספר הטלפון של יוצר הקבוצה וחותמת חותמת יוניקס).
כדי לשלוח הודעות, פרסם ל- WhatsApp/יוצא:
< "טלפון": "4915112345678", "הוֹדָעָה": "שלום מבוט!" >
נכון לעכשיו יש רק בפקודה מיושמת
לקבלת מידע קבוצתי (חברים, כותרת), פרסם ל- WhatsApp/CMD
< "CMD": "group_info", "טלפון": "4915112345678-1400000000", "התקשר חזרה": "any_string_here" >
ההתקשרות תשמש לזיהוי התגובה לפקודה זו. רצוי להשתמש ב- UUID לשם כך. התגובה תפורסם לנושא WhatsApp/IQ:
< "CMD": "group_info", "התקשר חזרה": "any_string_here", "קבוצה": "4915112345678-1400000000", "משתתפים": < "4915112345678": "מנהל", "4915187654321": ריק, >, "נושא": "קבוצת דוגמא" >
על אודות
MQTT-Interface לשירות ההודעות WhatsApp
איך WhatsApp תור את ההודעות שלך?
אלו שם, חבר! זה’זה הולך להיות כמעט שנתיים של המגיפה בעוד כמה חודשים, והדרך בה התאימנו את אורח החיים שלנו, הו ילד! כולנו נשארנו מחוברים ואפילו עשינו את עבודתנו באמצעות פלטפורמות העברת הודעות שונות. השימוש בפלטפורמות מרובות, כולל WhatsApp, אינסטגרם ופייסבוק, עלה משמעותית. WhatsApp היה זה עם השימוש הגבוה ביותר, ועם הודו הייתה WhatsApp’השוק הגדול ביותר השנה! אבל האם ידעת ש- WhatsApp משתמשת באחד ממבני הנתונים הבסיסיים ביותר, תור, המשמשת פלטפורמת העברת הודעות זו כדי להעביר את ההודעות שלך בהצלחה?
מה זה תור?
תור, כפי שהשם מציין, הוא בדיוק כמו זה בחיים האמיתיים. לתור יש שני קצוות, ראש וזנב, ופריטים מתווספים רק בקצה הזנב ומוסרים מקצה הראש. דמיין קבוצת אנשים שמחכים בתור כדי להשיג פיצה, ואת האדם הראשון שהגיע לשם, אני.ה., הראשון בתור, יינתן העדפה והיא תהיה זו שתקבל את הפיצה או להיות “נדחף החוצה.” מושג זה טכני ידוע בשם FIFO או הראשון ב- First Out.
מהו תור הודעה?
כמעיד על הכותרת, תור הודעה הוא תור מלא בהודעות. שירות אסינכרוני זה משמש להעברת הודעות או נתונים בין שני אנשים או קבוצת אנשים. האדם ששולח את ההודעה לתור הוא המפיק, וזה שמקבל את ההודעה הוא הצרכן. מהתור’נקודת מבט, הודעה היא רק אוסף של בתים ויכול להיות כל דבר החל מהודעת טקסט רגילה או הודעה המכילה לקוח’מזהה הזמנה או אפילו הודעת שגיאה.
- במערכת תורי הודעה ישנם שרתים מרובים המכונים מתווכים. מתווכים אלה אמינים מאוד וניתנים להרחבה, והם יוצרים אשכול. לאחר הפקת הודעה או נשלחת מצד המפיק, ההודעה מאוחסנת בתור ההודעה עד שהצרכן זמין לקחת את ההודעות.
- ברגע שהצרכן או הנמען יהיה זמין לקחת את ההודעה, התור דוחף את ההודעה לצרכן ומחכה שהצרכן יעבד את ההודעה לחלוטין.
- לאחר שהצרכן מעבד את ההודעה, הוא נמחק לחלוטין מהתור.
פתרונות תור הודעה
ישנן מספר רב של קוד פתוח ותוכנות בחינם המשמשות לתור הודעות.
קפקא: אפאצ’ה קפקא’מערכת ההודעות S היא מערכת רישומי פרסום מחושבת היטב ומערכת תורים שיכולה להתמודד עם נפחי נתונים גבוהים מאוד. Kafka הוא סובלני תקלות ומפקח ללא הרף על הצמתים באמצעות שירותים שונים, מה שמאפשר לעבוד איתם.
ארנב MQ: RabbitMQ הוא אחת ממערכות מתווך העברת הודעות פתוחות ביותר שנמצאות במקור שהטמיעו במקור את פרוטוקול התורים המתקדם (AMQP). תורים הם חוט יחיד במערכת זו, ותור אחד יכול להתמודד עם עד 50,000 הודעות.
Amazon SQS: שירות תורים פשוט של אמזון הוא מערכת תורי הודעות מופצת המשמשת לניתוק שירותי מיקרו ויישומים שונים מבלי לדרוש מהם לשמור על תורי ההודעות שלהם. Amazon SQS מספקת גם ממשק API לשירותי אינטרנט שמשתמשים יכולים לגשת אליו באמצעות שפות תכנות נפוצות.
ActiveMQ: ActiveMQ היא מערכת מתווך נוספת של הודעות שנכתבה ב- Java ויש לה לקוח שירות Message Message מלא של Java. יש לו תמיכה מובנית ב- AJAX ו- REST ותומכת בפרוטוקולים שונים כמו AMQP, MQTT, STOMP וכו ‘.
איך WhatsApp מספק את ההודעות שלך?
לפני שנכנס לאופן התור ההודעות ב- WhatsApp, תן’זה מבין את האפליקציה עצמה. מקודד באמצעות שפת התכנות של ארלנג, WhatsApp הוא המשמש ביותר עם כמעט 2 מיליארד משתמשים חודשיים. WhatsApp משתמש בפרוטוקול ההודעות והנוכחות הניתנות למקור פתוח (XMPP) כדי להקל על הודעות מיידיות בין שני צדדים. בתחילה, WhatsApp התחיל באמצעות השרת ejabbered. עם מספר כה גבוה של משתמשים מדי יום, חיוני ששרתים יתמודדו עם העומס ביעילות והמערכת אמינה. בשנים, הקוד הוקם מחדש, עבר מ- XMPP לפרוטוקול מעוצב פנימי ושינוי כמה רכיבי ליבה כדי לשפר ולהשיג ביצועי שרת אופטימליים.
כמו וכשאתה שולח הודעה, היא תור בשרת עד שהמקלט מתחבר מחדש כדי לאחזר את ההודעות הללו. אז כשאתה טקסט לחבר שלך, ואם הם לא עושים’יש גישה לאינטרנט לקבלת ההודעות, הודעות אלה הן תורים בשרתי WhatsApp, ותהליך זה ידוע בשם “אחסן וקדימה” מַנגָנוֹן. רק כאשר המקלט מקבל את ההודעות הן שנמחקו מהשרת ונמחקו מהתור. מאוחר יותר, כאשר למקלט יש חיבור לאינטרנט, הודעות אלה מועברות אליהם או מאוחדות על ידי המקלט. כאשר המקלט סוף סוף מאשר כי ההודעה התקבלה, אחזור ההודעה המוצלח של ההודעה נשלח חזרה לשרת WhatsApp, וזה כאשר אתה רואה את סימן הסימון הכפול ליד ההודעות שלך.
מבני נתונים אלה נמשכים זמן רב, ובהבנה טובה של זה ייקחו לך דרך ארוכה. אז בפעם הבאה שהמורה שלך מתחיל לדון במבני נתונים, שם לב שם טוב. כֵּן? בסדר?
ובכן, אז נתראה בפעם הבאה!