מבוא
אחד מן האמצעים הטובים ביותר להעברת מידע הינה רשת האינטרנט, באמצעותה ניתן להעביר מידע בין שתי נקודות הנמצאות במרחק של אלפי קילומטרים אחת מהשניה במהירות. חברות רבות מסתמכות על הרשת בכדי להעביר מידע מקצה העולם אל קצהו השני. בכדי שהמידע יעבור בין שני הצדדים על כל צד להריץ תוכנה אשר תוכל לקבל ולשלוח מידע באמצעות הסכמה הנוצרת בין שני הצדדים.
במדריך זה נסביר כיצד תקשורת זו עובדת וכיצד אנו יוצרים אותה באמצעות -.Net בסוף המדריך נכתוב תוכנת צ'אט קטנה אשר רצה בין השרת ללקוח אשר תדגים תקשורת זו.
תקשורת – נקודת המפתח לאפליקציות מצליחות רבות |
מספר מונחים
- Protocol (פרוטוקול) – הסכמה בנוגע לצורת דיבור מסויימת: כאשר אנו רוצים ששני יחידות קצה (שני מחשבים) יוכלו לדבר אחת עם השנייה עלינו ליצור פרוטוקול אשר יקבע כיצד שיחה זו תתנהל.
- כתובת IP – כתובת IP הינה כתובת זיהוי, המאפשרת לנו לזהות את המחשב ברשת בה הוא קיים. כתובת ה-IP נכתבת באופן הבא: X.X.X.X. כל X מייצג מספר הנע בין 0 ל-255, וכל חלק מהכתובת נקרא "אוקטטה". אוקטטה היא מספר המורכב מ-8 סיביות, מכאן ניתן להסיק כי כתובת IP מורכבת מארבעה אוקטטות. כאשר נרצה לגשת למחשב מסויים ברשת עלינו לדעת את כתובת ה-IP שלו.
כתובת ה-IP המשומשת כיום נקראת כתובת IPv4, בעוד לכתובת ה-IP קיימת אף גרסה חדשה יותר בשם IPv6: כתובת מסוג זה מכילה 128 סיביות, בניגוד ל- IPv4 המכילה 32 בלבד (4 אוקטטות * 8 סיביות). כתובת זו יכולה להכיל כמות גדולה יותר של מחשבים ועתידה להחליף את IPv4. עם זאת, במדריך זה נעסוק ב-IPv4 בלבד. - Port (פורט) – פורט הוא מעין ערוץ שדרכו אנו יכלים להעביר מידע לתוכנה מסויימת. אם נדמה את כתובת ה-IP למספר רחוב (המחשב שלנו), מספר הבית יהיה הפורט (התוכנה). שילוב השניים מאפשר לנו לתקשר עם תוכנה ספציפית במחשב מסוים. פורט הינו מספר הנע בין 0 ל-65535.
- Socket (סוקט) – מתאר את השילוב של כתובת ה-IP יחד עם הפורט. סוקט הוא ערוץ דו-כיווני אשר באמצעותו אנו יכלים לשלוח מידע ולקבל מידע. בדוגמה בה ה-IP הינו מספר רחוב והפורט הוא מספר בית– הסוקט הוא הכתובת המלאה, או במילים אחרות: השילוב של השניים.
תקשורת בין מספר נקודות קצה |
פרוטוקולי תקשורת
במדריך זה נעבור על שני פרוטוקולי תקשורת נפוצים: TCP ו-UDP. עם זאת, לא נדון בדרך בה הפרוטוקולים עובדים, אלא נסביר כיצד יש להשתמש בכל אחד מהם.
פרוטוקול TCP – Transmission Control Protocol: פרוטוקול זה הינו פרוטוקול Connection Oriented, הכוונה היא שעל שני הצדדים ליצור חיבור לפני שיוכלו להתחיל לתקשר. פרוטוקול זה מאפשר העברת חבילות מידע ללא הגבלת גודל (חבילות גדולות יחצו לחבילות קטנות יותר). בשיטה זו אנו יכולים להיות בטוחים שהמידע שנשלח אכן התקבל ובדיוק באופן הנשלח (זאת בתנאי שקיים חיבור). אמינותו היא בשל הסתמכות על שיטת השליחה והוכרה (Acknowledge) – או במילים אחרות, כאשר המחשב שולח מידע לצד השני, הצד השני ידווח חזרה שאכן קיבל את המידע. פרוטוקול זה נמצא בשימוש רב כיום ואף משמש להעברת דפי אינטרנט (HTTP).
- יתרונות – המידע הנשלח דרכו נשלח ומתקבל באותו הסדר, באופן בטוח וללא הגבלה.
- חסרונות – מחייב התחברות לצד שרת טרם שליחת המידע. בנוסף, פרוטוקול זה איטי יחסית בשל השיטה בה הוא משתמש.
המחשת פרוטוקול ה-TCP |
פרוטוקול UDP – User Datagram Protocol: פרוטוקול זה אינו פרוטוקול Connection Oriented, זאת אומרת שהוא אינו דורש התחברות טרם העברת מידע. בעוד פרוטוקול ה-TCP עובד בדומה לחברת דואר (חבילות יעברו תהליך של מיונים והרשמה בכדי שלא יאבדו), ניתן לדמות את פרוטוקול ה-UDP למשגר השולח חבילות מידע באוויר מבלי לדעת אם הן יגיעו או לא. על אף חיסרון זה, פרוטוקול זה מהיר יותר מ-TCP. פרוטוקול זה משומש בין היתר במשחקי רשת ושיחות ברשת, הזקוקים לקצבי שליחה וקבלת מידע מהירים. במשחקי מחשב, נעשה חיקוי שיטת ה-"שליחה והוכרה" בפרוטוקול זה על מנת להפוך אותו לאמין יותר. עם זאת, פרוטוקול ה-UDP האמין (Reliable User Datagram Protocol) עדיין יהיה מהיר יותר מפרוטוקול ה-TCP.
- יתרונות – העברה וקבלה של מידע באופן מהיר יותר מאשר בפרוטוקול ה-TCP.
- חסרונות – אמינותו פחותה – המידע אינו נשמר באותה הצורה שבה הוא נשלח, ואין אפשרות לדעת אם הצד השני קיבל את המידע.
המחשת פרוטוקול ה-UDP |
הקישור לזיכרון RAM לא נכון
זה לא נכון לקשר מכאן לזכרון RAM כי זה לא הנושא.
מדובר כאן על זכרון של תהליכים, לכל תהליך מוקצה אזור זכרון ואת אותו זכרון הוא לא יכול לחלוק עם תהליכים אחרים.
אין שום טעם לקשר את זה לזכרון RAM למרות שהזכרון הזה נמצא שם.
חוץ מזה מדריך מעולה!!
אתם אתר נפלא שתמיד מחכים אותי.
כתבה מעולה…
תודה רבה קודם כל, אפשר ללמוד המון.
אפשר לשפר בכך שתפרט מעט יותר על כל מיני מושגים שמבחינתך הם בסיסיים אך מבחינת אנשים שאתה בא ללמד הם ממש לא.
בכל אופן ישר כח ותמשיך כך.מצוין!
למה בדוד-מת?
הוא מת כבר לפני שנים.
לא רלוונטי
ב-.NET יש תשתית WCF שהיא תשתית ה-communication של ה-Framework.
לעבוד ישירות מול המחלקות המתוארות זה חסר טעם ולא נכון מבחינת ארכיטקטורה.
התשתית שהיא עשירה לאין ערוך ממה שתואר כאן, מאפשרת העברת נתונים באופן נוח ו"שקוף" ללקוחות המאזינים ולקבוע את צורת התקשורת (Named Pipes, וכיו"ב) בקונפיגרציה.
היא כמובן גם מאפשרת להתמודד עם תרחישים פשוטים ועד תרחישים מסובכים הרבה יותר בהם לדוגמה הנתונים נאספים ממספר מערכות בתהליך טרנזאקטיבי או תרחישים אחרים.
תודה רבה
מדריך מעולה ,נפל עלי כיאלו הזמנתי אותו אישית
בינוני.
מצטער שזה יוצא כ"כ תקיף, אבל הקוד שנכתב הוא ברמה בינונית מאוד.
כל העטיפה, השימוש בThreadים בצורה לא נכונה, עבודה מול UI בצורה לא נכונה, חוסר עבודה בקונבנציות…
ד"א, לבחור שכתב שכדאי לכתוב את זה בWCF – אתה טועה. WCF מתאים לשירותים (SOA במיוחד) ולא לתקשורת כזו. זה סתם overhead לא הכרחי.
סוגרים על פרוטוקול ושולחים בraw sockets כמו שהבחור עשה… אלא אם יש לך שרת מרכזי שמולו אתה עובד (כמו שlive messenger עובד) ואז הארכיטקטורה שלך צריכה להשתנות ואולי WCF יותר יתאים.
בכל מקרה- בחור, רצון יש אבל ידע לוקה בחסר.
6 -קצת צניעות לא תזיק וגם לא ידע
WCF לא קשורה בהכרח ל- SOA למרות שהיא דרך אופרטיבית אידיאלית להשיג SOA.
WCF זו תשתית התקשורת של ה-FRAMEWORK והיא מטפלת בהעברת נתונים באשר היא.
מבחינת ארכיטקטורה הרצון שלך הוא להגדיר מה אתה רוצה להעביר בצורה פשוטה בקוד (גישת AOP שבה עושה שימוש WCF)ולקבוע בקונפיגרציה האם אתה רוצה העברה פשוטה כמו NAMED PIPES או TCP או משהו כמו HTTP או כל פרוטוקול אחר בהתאם לצורך ול-HOST.
אתה יכול לעבור מצורת העברה אחת לאחרת ללא שינוי קוד.
לעיתים בכלל לא מדובר על העברת נתונים בין מכונות אלא על העברה פשוטה בין אפליקציות. זה בכלל לא משנה.
תכנות נכון הוא להבטיח את המחר, את היכולת לשנות ולגדול בלי שכתובים מהותיים.
במקרה שלך, אתה מציע לכתוב קוד "בסיסי" (שהוא אגב הרבה יותר מורכב מ-WCF) ומחר כשהצורך משתנה או גדל להחליף את כולו.
אני מצטער, אבל גם לך יש קצת שעורי בית להשלים.
מיושן – יש היום WCF
בשביל ליצור תקשורות ב
.NET
לא משתשמים בדרך הפרמטיבית הזאת עם על הכבוד , יש טכנולוגיה שנקראת
WCF ( שמחליפה את הדרך שאתה מציג)
שאתה כותב קוד קצר ומאחורי הקלעים עולם ומלאו(שמכיל את הדרך הזאת) כולל אבטחה ( RSA גם). ניתן לבחור בשלל אפשריות מתוך ה
WIZARD
אבטחה – סוג תקשורות TCP UDP WSHTTPS ועוד הרבה .
מטרת המדריך
שלום, מטרת המדריך אינה להציג למשתמשים את הדרך הפשוטה והקלה ביותר ליצירת תקשורת בסביבה זו. המטרה היא לא להעביר את המידע במספר השורות הקצר ביותר או בדרך הקלה ביותר. מטרת המדריך היא ללמד את המשתמשים ליצור תקשורת ברמה נמוכה יותר תוך כדי שהם לומדים כיצד חבילות המידע נשלחות ומה קורה בעצם ברקע. במדריך המשתמשים לומדים כיצד להשתמש ב-Multi-Threading ובקבצי DLL. אומנם הדרך שבה המידע הועבר בין ההליכים אינה הדרך הטובה ביותר ולא הכי נכונה אך היא המובנת ביותר. כמובן ניתן היה למשל להשתמש במחלקת ה-SynchronizationContext בכדי להעביר מידע בין ההליכים בצורה נכונה יותר.
למי שמגיב נגד, ולכותב המדריך
אני לא ראיתי אף מדריך שמסביר זאת
מי שחושב שהמדריך לא טוב, שיכתוב מדריך בבקשה.
אני כרגע לומד את זה ואני אומר תודה רבה למי שכתב את המדריך.
אני מקווה שיעזור לי.