אוג' 06
הסבר האופן שבו שתי תכניות (האחת פועלת כ-server והשניה כ-client) מתקשרות אחת עם השניה באמצעות הפרוטוקול TCP\IP. ההסבר כולל שימוש בדוגמת קוד פשוטה.
הסבר האופן שבו שתי תכניות (האחת פועלת כ-server והשניה כ-client) מתקשרות אחת עם השניה באמצעות הפרוטוקול TCP\IP. ההסבר כולל שימוש בדוגמת קוד פשוטה.
9 באוגוסט, 2009 בשעה 9:54
היי,
דוגמא מצויינת , אך חסרים כמה אלמנטים..
1. האם ניתן לקבל יותר אינפורמציה ( *לעוסה ) לגבי מחלקת socket בכדי להבין איך למעשה נוצר הקשר , מה קורה כאשר יש עיקוב או Retransmission וכמובן , האם ניתן להרים את הקישור מעל SSL או דרך מוצפנת אחרת …
פרק התקשורת שעידכנת מצויין (!) הייתי מוסיף דוגמא או הסבר על איך עובדת אפליקציה כזו בעולם האמיתי , כאשר יש Event Handeling עבור הודעות מסויימות או העברת מבני נתונים בין שרת ללקוח וההיפך..
בנוסף קבצי הדוגמאות שקישרת , אינם זמינים.
מאוד נהניתי לקרוא את העדכון.
9 באוגוסט, 2009 בשעה 11:36
תודה על ההערות. הוספתי annotations לוידאו קליפ ואשמח אם תחזור ותפרסם שאלות נוספות מדוייקות כדי שאוכל לשפר את הקליפ.
לגבי עבודה בעולם האמיתי… רוב העולם האמיתי סובב סביב פיתוח יישומי Java EE שפרק התקשורת בספר זה יכול להוות (במקרה הטוב) העשרה. קיימים מקרים מאד מועטים שבהם יש ביטוי מעשי לנושא של פרק זה.
למה אתה מתכוון ב-"עיקוב"? לגבי קישור מעל SSL יש לבדוק זאת.
בנוגע ל-events handling אתה יכול לממש את שמוסבר בפרק טיפול ב-events רק שלא מדובר ב-events שקשורים ב-GUI כך שתצטרך בעצמך לפתח את כל המחלקות וה-interfaces הדרושים.
אשמח לפידבק נוסף!
תודה,
חיים.
נ.ב. תיקנתי את בעיית הקבצים להורדה.
9 באוגוסט, 2009 בשעה 21:55
"עיקוב" = יש איטיות או רעש ברשת.
10 באוגוסט, 2009 בשעה 0:06
כאשר בתכנית אחת יש קריאה להפעלת read או מתודה דומה… על אובייקט ה-input stream שיוצא מה-socket וכתוצאה מעיכוב לא מגיעים ה-bytes שמצפים להגעתם אז ה-thread שבו יש קריאה להפעלת read פשוט בהשהייה…. ההפעלה של read פשוט גורמת ל-thread לעצור ולהמתין עד שנתונים יגיעו. בהצלחה, חיים.
10 באוגוסט, 2009 בשעה 21:02
במדריך שלך בנושא Threading, כתבת שהוספת המילה השמורה synchronized למתודה מחזיקה את הדגל של כל תוכנה, ז"א כל האובייקטים בתוכה.
אבל מה שקורה בעצם הוא שהדגל של האובייקט הנוכחי this
מוחזק, ואם המתודה סטאטית אז הדגל של (Class.class) מוחזק.
כדאי שתבהיר , (או תתקן?) את העניין.
10 באוגוסט, 2009 בשעה 21:41
האם אפשר להוסיף הדגמה של מעבר אובייקט דרך הSocket ?
כמו למשל ResultSet ?
10 באוגוסט, 2009 בשעה 23:40
לאורי שלום,
"הוספת המילה השמורה synchronized למתודה מחזיקה את הדגל של כל תוכנה, ז"א כל האובייקטים בתוכה" - לא זכור לי שכתבתי משפט כזה… תוכל לצטט במדוייק?
הוספת המילה synchronized לכותרת של המתודה גורמת לכך שכאשר יש קריאה להפעלתה אז המתודה תתחיל לפעול אם ורק אם ה-thread שמפעילה מצליח לקבל לידיו את ה-lock flag של האובייקט שעליו המתודה מופעלת.
לא התייחסתי בספר למקרה של מתודה סטאטית שמסומנת כ-synchronized…. אם מתודה שמסומנת כ-static היא גם synchronized אז הנעילה אכן מתבצת כפי שהסברת… על האובייקט מהמחלקה Class אשר מתאר את המחלקה שבה המתודה הסטטית האמורה מוגדרת.
אני אשתדל להוסיף הדגמה של מעבר אובייקטים דרך sockets.
חיים.
10 באוגוסט, 2009 בשעה 23:59
יש לשים לב לעובדה , ששימוש במילה השמורה בכותרתה של מתודה הופך את כל תוכנה ל- synchronized block ,במובן
שכל עוד היא(המתודה) לא תסתיים, ה "lock flag" לא ישוחרר.
זאת עלול לגרום לכך “lock flag” יוחזק יותר מהדרוש…
תסכים איתי שלא ברור לאיזה אובייקט שייך הדגל עליו אתה מדבר.
11 באוגוסט, 2009 בשעה 5:32
הופך את כל תוכנה < - הכוונה בתוכנה הוא לתוכן שלה… לא לתוכנה עצמה.
בכל מקרה, אני מודה להערה שלך וזה עתה סיימתי לעדכן גירסה חדשה של הפרק threads. כעת הטקסט החדש הוא:
"יש לשים לב לעובדה, ששימוש במילה השמורה synchronized בכותרת של המתודה גורם לכך שכל הקוד שכתוב בתוכה ייחשב לקוד אשר מתוחם ב-synchtonized block באופן שכל עוד שהריצה של המתודה לא הסתיימה, ה-“lock flag” לא ישוחרר. "
תודה,
חיים.
נ.ב. זה היה יותר עוזר לי אילו היית מוסיף את ההערה כתגובה לפוסט שפירסמתי בו את הפרק threads.