תגידו...

ivgeni1000

New member
תגידו...

אתם יכולים (ברגע זה) לחשוב על רעיון לסינכרון דף עם בסיס נתונים ללא צורך בריענון? (כמו צ'אט, למשל...)
 

אמיר ט

New member
אתה צריך להפריד

בין צד שרת וצד משתמש בשרת יש לך את הנתונים (מסד הנתונים לדוגמא) ואתה רוצה שהם יגיעו אל הלקוח, הבעיה שהם מגיעים רק כשהלקוח מבקש אותם במקרה של דף HTML רגיל. בשביל זה יש FLASH או JAVA שיבקשו את הנתונים מהשרת בלי התערבות הלקוח. בזמנו חשבתי על רעיון איך לעשות משהו כמו שאתה רוצה בלי צורך של ריענון ממשי של הדף, אבל זה טיפה מסובך ודורש גם גאווה סקריפט. אם אתה מעוניין זאז תגיד ואני אנסה להסביר (ד"א לא ניסיתי את זה, רק חשבתי על רעיון ככה שלא בטוח שזה יעבוד).
 

orenphp

New member
עוד בנושא...

הרעיון עצמו די פשוט, כמובן שיש הפרדה בין "צד שרת" ל"צד לקוח" אבל ניתן לגשר על זה באמצעות SOAP או XMLhttp - באמצעותם ניתן להעביר מידע בין שרת ללקוח בלי לעשות ריפרש למסך. הכלים עצמם די פשוטים ורק צריך ללמוד איך להפעיל אותם (דבר שניקרא לקרוא עליו בgoogle) אני לא יודע איך התכוונת לעשות את זה עם JS, מעניין אותי לדעת.
 

אמיר ט

New member
העיקרון דיי פשוט

בצד השרת יש סקריפט שמוציא רק את המידע שאתה לא קיבלת עדיין (שורות חדשות בצאט...) והוא שולח אותם ללקוח מתי שהוא מבקש... בצד הלקוח יש פריים אחד שהוא הצאט עצמו, ויש נגיד בתוכו IFRAME בגודל 0, ככה שלא רואים אותו והוא מתעדכן כל X שניות שנקבע מראש... בתוך ה IFRAME הזה יהיה קוד גאווה סקריפט שמוסיף את השורות החדשות ל PARENT שלו, שזה בעצם הצאט עצמו. וככה נותר אפקט של צאט שכביכול לא מתעדכן ע"י REFRESH למראית עין, ומציג נתונים לדף הנוכחי, וזאת מבלי שהלקוח ידע שהדף עושה REFRESH כל הזמן...
 

orenphp

New member
תגובתי לנושא...

עשיתי את זה פעם ומהר מאוד הבנתי שהרעיון לא מוצלח במיוחד (לעניות דעתי). הסיבות: 1. מבחינת משתמש רחוק: אתה יכול לגרום לבעיות למשל כאשר אני יחליף דפדפן שלא תומך בIFRAME (נטסקייפ למשל) - ופיתרון כגון: תעבוד עם X(וינדוס) וY(אקספולרר) לדעתי אינו בא בחשבון(אילוץ בלתי נסבל). 2. מבחינת מתכנת: א). קשה מאוד לדבג את העסק, אתה תיהיה צריך להעלים ולהחזיר את הIFRAME הנסתר במידה ויש בעיות ואתה בעצם מקבל כמה רמות של עמודים במקום רמה בודדת (באופן רעיוני יותר מאשר ביצועי). ב). במידה ואני רוצה להעביר את כל השדות למשל בטופס (שם, גיל וכו') לIFRAME הנסתר (על מנת שיבצע עידכון במסד) אתה צריך להכין איזה פונקציית JS על מנת שתידע לשרשר את הURL עם הפרמטרים הרצויים - דבר שיקשה עלייך בתחזוקה עתידית (הוספת, מחיקת שדות וכו'). לכן לדעתי כדאי וצריך להשתמש בSOAP או XMLHTTP (אני ד"א משתמש בXMLHTTP ומוצא אותו כדרך מצויינת לתקשר בין צד שרת ללקוח) אשר יעודם הראשוני הוא לענות על הדרישה הזו. אשמח לשמוע את דעתך.
 

orenphp

New member
עוד כמה דברים ששכחתי...

עוד כמה סיבות טובות שחשבתי עליהם (באמת חייבים לעשות כאן "עדכן הודעה"!): מבחינת משתמש רחוק: ברגע שאתה עושה כל X שניות ריפרוש הדפדפן עובד וזה מאט את החיבור. מבחינת מתכנת: למה לעשות ריפרוש למסך כל X שניות? מי אמר שהתעדכן משהו? למה אני צריך בתור מתכנת לבדוק כל פעם האם השתנה\נוסף נתון ולא לבצע פעולה רק(!) כשאכן קרה משהו?
 

N i X

New member
אבל אז, לא תצתרך לשמור חיבור פתוח?

כאילו, חיבור HTTP נגיד, כדאי שאם משהו מתעדכן, הוא יעביר את המידע?
 

orenphp

New member
לא ממש..

בשביל שליחת נתונים לשרת: בעת לחיצת כפתור כמו "שלח", "הוסף" וכו' אני יפעיל את הפו' של הXMLHTTP ואז יפתח קשר מול השרת ובסופו כמובן הוא יסגר. בשביל עדכון נתונים מהשרת ללקוח בזמן אמת: במידה ומשהו יתעדכן בשרת, ניתן לעשות הפנייה ללקוח שמשהו התעדכן. זה כבר טיפה יותר מסובך האמת ומצריך טיפה יותר חשיבה. ניתן לעשות רישום של כל IP שמתחבר לאותו הצ'אט(ומוחק אותו בעת היציאה), ואז ברגע שיש מידע חדש שנכנס למסד, השרת יפעיל סקריפט שבודק את הIP הרשומים כרגע ושולח אליהם XML עם הנתונים החדשים - זה מתקבל בXMLHTTP ואז מתורגם להודעות ברמה של "הצגת הודעות"(החלון שאתה רואה בו את כל ההודעות של כל האנשים). בכך, אתה מקבל את המידע רק כשאכן קיים חדש ולא מבצע ריפרוש אין סופי על "ריק" (לפעמים). האמת היא שדבר כזה בניתי עם טכנולוגיית מיקרוסופט DNA (זאת הייתה הדרישה) אבל אין לי ספק שניתן לעשות אותו דבר עם PHP, סה"כ 99 אחוז מהעסק הוא הרעיון והשימוש הנכון בXMLHTTP או בSOAP.
 

N i X

New member
עדיין לא ראיתי גופים מסחריים

שמשתמשים בזה... אולי תוכל להביא לינק? הרוב עושים ircd ועושים קליינט בג'אוה, כניראה זה יותר יעיל.
 

orenphp

New member
תתפלא...

בקשר לגופים מסחריים(לא בדיוק מסחרי אבל בערך)... מכיר אחד די גדול שמגייס(דגש) חבר'ה בגילי. ד"א: בסביבת העבודה החדשה של .NET זה כבר פשוט כמו לעשות את זה בג'אווה (ואולי יותר) לעשות דברים כאלו.
 

האזרחק

New member
בעיות:

למרות שהפריים נסתר עדיין "שומעים" את הרפרש כל X שניות. (טיק טיק טיק וזה מעצבן) שלא לומר טוחן את השרת במקרה של יותר מ3 משתמשים. פתרון: (שנוסה בהצלחה) אכן יוצרים פריים נסתר שמבקש דף מהשרת, אלא שהשרת לא שולח EOF ובעצם שולח סקריפט בכל פעם שיש משהו חדש על השרת (חדשות, שורת צ'ט או IM) רצוי שאותו דף "אינסופי" לא יהיה PHP (או ASP) אלא משהו חזק יותר. (אני עשיתי זאת על WIN2K ולכן התשמשתי ב ISPAI DLL) ה DLL מקבל מבסיס הנתונים ושאר האפליקציות על השרת הודעות על שינויים והוא "יודע" מה ואיך לשלוח את זה אל המשתמש... כמובן שהפתרון מסורבל, מסובך ודורש ידע נרחב בתחומים נוספים מעבר ל ASP PHP - אבל הוא עובד. (ואפילו שילמו עליו הרבה כסף...) אותו פריים עושה רפרש כל כמה דקות מאחר והדפדפן מפסיק את משיכת הקובץ בעצמו כעבור X דקות. (משהו כמו 5,6 דקות) ד"א, הפתרון המלא לא כולל 2 פריימים אלא פריים אחד מאחר ו IE לא מסוגל למשוך 2 דפים במקביל מ 2 פריימים שונים, אבל זה נושא לדיון אחר :)
 
למעלה