ABA


"| לקוח / שרת | עידכון דינאמי"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10881 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10881
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   16:57   15.09.12   
אל הפורום  
  | לקוח / שרת | עידכון דינאמי  
 
   צהרים טובים לכולם
אני מעוניין לעשות באתר אינטרנט , עידכון דינאמי אוטומטי הסבר :
למשל קיימת טבלה של נתונים בדף ראשי.
משתמש1 מעדכן ערך בטבלה(כמובן גם בבסיס נתונים).
ומשתמש2 רואה את העידכון על הטבלה באותו הרגע ללא צורך בריפרש
לדוגמא :
כמו שסוחרים בבורסה ושערך של מניה מתעדכן אז מיד כולם רואים את השינוי.

האם מספיק ללמוד בשביל זה AJAX או שזה מצריך עוד ידע במשהו אחר ?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  AJAX זה מספיק, אתה צריך לטעון את התוכן כל פעם מחדש כל X שניות... Ice Cold  15.09.12 19:03 1
     תודה רבה אחי DarkMaster 15.09.12 19:50 2
  מכתב Frozen_Prince  15.09.12 21:42 3
  תראה עקרונית AJAX אמור להספיק לך אבל בוא נדבר על הנושא עוד קצת, יוחאי 15.09.12 21:49 4
     אחלה רעיון DarkMaster 15.09.12 23:17 5
         וואלה אני לא כזה מת על ספרים, יוחאי 16.09.12 00:01 6
     רעיון יפה, אבל עדיין צד לקוח שלך CaTz 16.09.12 10:16 7
         מכתב : DarkMaster 16.09.12 11:21 8
         socket לא תומך בדפדפנים ישנים, יוחאי 16.09.12 13:01 9
     רעיון טוב BlacK EaglE 16.09.12 19:17 10
         כן זאת אחלה אופציה חח אבל לא נראה לי שהוא יילך לכיוון הזה, יוחאי 16.09.12 20:54 11

       
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   19:03   15.09.12   
אל הפורום  
  1. AJAX זה מספיק, אתה צריך לטעון את התוכן כל פעם מחדש כל X שניות...  
בתגובה להודעה מספר 0
 
אם אתה רוצה שזה יהיה ממש ממש LIVE, אתה חייב ללמוד עבודה עם SOCKETS או PUSH REQUESTS, שזה כבר יותר מסובך...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   19:50   15.09.12   
אל הפורום  
  2. תודה רבה אחי  
בתגובה להודעה מספר 1
 
   אפשר ללמוד את הנושא של SOCKETS או PUSH מהאינטרנט או שזה באמת קצת מורכב ועדיף לקרוא ספר בנושא


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Frozen_Prince 
חבר מתאריך 11.5.06
5341 הודעות
   21:42   15.09.12   
אל הפורום  
  3. מכתב  
בתגובה להודעה מספר 0
 
אם הצד-שרת שלך הוא ASP.NET או MVC, תבדוק על SignalR
היא במיוחד בשבילך http://signalr.net/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   21:49   15.09.12   
אל הפורום  
  4. תראה עקרונית AJAX אמור להספיק לך אבל בוא נדבר על הנושא עוד קצת,  
בתגובה להודעה מספר 0
 
   בעיקר כי זה מעניין


הרעיון הוא לבצע עדכון בUI ברגע שיש עדכון במערכת, עכשיו יש דרך טובה והגיונית לעשות את זה, ויש את הדרך הפשוטה, שזה באמת לבצע כל פעם בקשה לשרת להביא את כל התוכן ולעדכן אותו גם אם אין שינוי, אני בעד הדרך הטובה והחכמה!

1.בוא נדמיין שיש לנו טבלה במסד נתונים שנקראת songs והיא מכילה מספר שדות:

song_id
song_title
song_author
song_lyrics

אתה מעדכן אותה המון, ומכניס אליה כל הזמן נתונים.

עכשיו בוא נדמיין את הדרך הלא טובה של לעשות עדכון לייב לנתונים מהטבלה:

כל 30 שניות אתה ניגש לטבלה שולף את כל הנתונים, ומחזיר HTML ופשוט מעדכן את הUI, לא טוב!

קודם כל כל פעם אתה ניגש מבצע פעולה על הדטאבייס של קריאה ממנו, כל פעם אתה מחזיר JUNK ענקי של HTML, כל פעם אתה מעדכן את הUI שלך במידע שיכול להיות כבר קיים.


הדרך שאני מציע כוללת בתוכה מספר שלבים:

1.עבודה עם Cache Module בPHP יש כמה כאלה, אם אתה לא מתעסק עם המון המון נתונים אז APC מספיק טוב.

2.חלוקת תפקידים בין הserver לclient אתה תבקש מידע מה-server ואת הUI אתה תבנה בצד הלקוח, לא מערבבים חלב ובשר.

3.לפני כל עדכון בUI אתה תוודא שבכלל יש מה לעדכן.

אז איך אנחנו עושים את זה?

קודם כל בכל רגע נתון אנחנו נחזיק בצד הלקוח את כל ה"שורות" שאנחנו מציגים שאני אומר כל ה"שורות" זה לא אומר בהכרח את כל המידע שלהם, מערך/אובייקט שיחזיק את הid של כל שורה יהיה מספיק טוב, עכשיו בכל עליה מחדש של העמוד שמציג את המידע שלנו, אנחנו נצטרך לייצר את המערך/אובייקט מחדש, שזה בסדר, גם ככה בעליה מחדש של העמוד אנחנו טוענים הכל מהDB כי אנחנו רוצים להיות מעודכנים תמיד!

השלב הבא הוא איך בעצם אנחנו יכולים לדאוג שכל מי שמסתכל על הUI ייקבל עדכון במידת הצורך, ולא יווצר מצב שרק חלק מהמשתמשים ייקבלו את העדכון?

בכל פעם שיש עדכון בשרת, אתה רוצה לסמן את העדכון הספציפי הזה למשך X זמן כדי שכולם יוכלו לקבל אותו, בגלל שאנחנו לא יודעים כמה זמן ייקח לכל משתמש לבצע את הבקשת AJAX לשרת, אנחנו צריכים לתת grace time למשתמש.

פה נכנס המנגנון APC שלנו אנחנו יכולים ליצור בdata store שלנו ערך לזמן מוגבל, אז בוא נעשה דבר כזה, כל פעם שאנחנו מבצעים עדכון בדטאבייס, אנחנו שומרים את הlast insert id בתוך הcache למשך 10 דקות, כמובן שאם במשך ה10 דקות נכנסים עוד עדכונים, אז אנחנו ממשיכים לייצר מידע בתוך הcache שכולו יוחזק ל10 דקות, אם המערכת שלך מתעדכנת באופן מאסיבי, הייתי מוריד את הזמן לפחות מ5 דקות או עובר למנגנון CACHE חזק יותר.

עכשיו מעבר להחזקה של המידע בCACHE אנחנו גם צריכים להחזיק מספר כל שהוא שייסמן את הגירסא האחרונה בcache נקרא למפתח הזה cache_version.

כל בקשה לעדכון שהclient עושה אתה מבחינתך תמיד מחזיר לו את הcache_version.

עכשיו אתה צריך לבצע בדיקה:

נניח הגירסא האחרונה שיש אצלך היא 3.5.2
וקיבלת גירסא מס' 3.5.6

משמע יש עדכון!

אתה שולח בקשה נוספת להביא את המידע האמיתי.

עכשיו הcache_data שאנחנו שומרים מחזיק סה"כ את הid שעדכנו לא את הנתונים האמיתיים, אבל פה החלק המגניב, אנחנו נשלוף אך ורק את המידע שאנחנו צריכים, שום דבר מעבר לזה!

אז אנחנו שולפים את המידע מחזירים אותו חזרה לclient בונים את מה שצריך לבנות בHTML ומעדכנים כמובן כל הזמן בclient את הגירסאת cache האחרונה שלנו, כדי שנהיה תמיד מסונכרנים!

וככה המנגנון שלנו תמיד נשאר מעודכן, אלא אם כן פיספסתי משהו

רעיונות לשיפור, מוזמנים בכיף, חשבתי על זה תוך כדי שכתבתי! אולי שווה לכתוב מערכת בPHP/JS שמנהלת משהו כזה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   23:17   15.09.12   
אל הפורום  
  5. אחלה רעיון  
בתגובה להודעה מספר 4
 
   אני חושב שזה קצת גדול בשבילי להבין פה את כל מה שרשמת , אהבתי את הרעיון , כנראה שיש לי המון ללמוד פה על הנושא של לקוח / שרת , ומגוון האפשרויות בו
אני ממש עכשיו פשוט נכנס לעסק , עד עכשיו הייתי עובד עם JSP ועם סרבלטים
ברמה מאוד בסיסית.

אבל ממש טוב כל מה שרשמת לקחתי ושמרתי בקובץ WORD במחשב .
אני יוריד איזה ספר של AJAX אולי אתה יכול להמליץ לי על אחד טוב
שאפשר להבין ממנו את השימוש בוא יחד עם שפת תכנות נוספת עדיף PHP למה בשבילי היא מאוד נוחה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   00:01   16.09.12   
אל הפורום  
  6. וואלה אני לא כזה מת על ספרים,  
בתגובה להודעה מספר 5
 
   כאילו יצא לי לקרוא כמה אבל בתחומים שממש דורשים ספר כמו ללמוד שפה חדשה נניח...

AJAX זה לא נושא כזה מטורף, הרעיון הוא לתת לך דרך לשלוח בקשות בצורה אסינכרונית, בלי שתצטרך לגשת ישירות לעמוד, או לרענן את העמוד, כחלק מJAVASCRIPT זה מגיע אליך בכמה דרכים שונות בגלל שכל דפדפן פשוט נתן שם אחר לאובייקט, אבל תשתמש בjQuery לא תצטרך לדאוג לזה.

אין יותר מדי מה להמליץ לך אני יכול להגיד לך לך תקרא על x y z אבל תתחיל עם הפרוייקט שאתה רוצה לבנות, תקרא קצת באינטרנט על תבניות נכונות לכתיבת הפרוייקט הספציפי שלך.

תתחיל לכתוב קוד, אתה נתקע, תנסה לחפש בגוגל תשובות, לא תמצא, תשאל פה, יש הרבה חברה תותחים כאן שיכולים לעזור לך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   10:16   16.09.12   
אל הפורום  
  7. רעיון יפה, אבל עדיין צד לקוח שלך  
בתגובה להודעה מספר 4
 
   "מציק" לשרת, זה מיותר לעשות בקשה כל X זמן אם אין עדכונים אתה יוצר תסם תעבורה וזה.

הייתי ממליץ לקרוא (אם אתה באמת רוצה משהו איכותי) על SOCKETS כמו שICECOLD המליץ.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   11:21   16.09.12   
אל הפורום  
  8. מכתב :  
בתגובה להודעה מספר 7
 
   לפי מה שהבנתי ממכם הדרך הפשוטה היא לעשות כל X זמן עידכון.
שאלה :
אפשר גם לעשות ברגע שלקוח ביצע עידכון לבסיס נתונים , רק אז השרת מבצע עידכון כולל והוא שולח פולס לכל הSESSIONS שמחוברים אליו לבצע עידכון(סתומרת על ה VIEW שלהם) ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   13:01   16.09.12   
אל הפורום  
  9. socket לא תומך בדפדפנים ישנים,  
בתגובה להודעה מספר 7
 
   זה feature חדש יחסית של HTML5 אני בעד תאימות בסיסית לפחות עד IE8


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
BlacK EaglE
חבר מתאריך 23.3.02
1354 הודעות
   19:17   16.09.12   
אל הפורום  
  10. רעיון טוב  
בתגובה להודעה מספר 4
 
   הצעה קטנה לשיפור היא שכבר בבקשה של ה-client כשהוא שואל האם ה-CACHE שלו הכי מעודכן, להחזיר לו את ה-delta שחסר לו.

לדוגמא, אם הגרסא הכי חדשה בשרת היא 360 ואצל ה-client היא 359, ה-client יקרא לפונקציה בשרת לדוגמא GetDataByLastUpdatedKey עם הערך 359
וכבר אז יקבל את ההפרש בין 359 ל-360. זה במקום שה-client יבין שהוא לא מעודכן ואז יזום בקשה נוספת. זה יכול לחסוך חצי מה-Round trips בעדכונים.

במערכת אצלנו עשינו את זה וזה חתך משמעותית את התקשורת לצד שרת שלנו.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   20:54   16.09.12   
אל הפורום  
  11. כן זאת אחלה אופציה חח אבל לא נראה לי שהוא יילך לכיוון הזה,  
בתגובה להודעה מספר 10
 
   אני מת על הדברים האלה, כשהקוד כתוב נכון זה תענוג לתחזק אותו!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net