שאלות של מתחיל - מקצועי ב nodejs
-
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
כל שתי שניות אתה מתעדכן מול צ'רדי בלי קשר לבקשות, ואתה שומר את המידע בזכרון (אחד המעלות הגדולות של נוד מול PHP!) וכשהקלינט שולח בקשה אתה שולף לו מיד מהזכרון את המידע האחרון שקיבלת מצ'רדי, כך הוא לא צריך להמתין למידע, והוא מקבל נתון שנכון לשתי שניות האחרונות
אז הרחתי נכון, שמשהו קורה כאן שהסקריפט והתהליך הנ"ל ירוץ קבוע.
והמידע הוא בעצם אחד לכל הבקשות.
בכך אתה מיישב את מה שהקשיתי קודם למה הוא שם את זה מחוץ ל app.all.א"כ נותר לי רק לחשוב איך לעשות בדיקה במקביל לפי מספר הטלפון/ מספר שהוקש לבדיקת התקדמות ביעד האישי של התורם.
שם לכאורה יהיה לי בעיה לעבוד בצורה זו, שהרי אין לי צורך לבדוק את כולם, ואני חייב לבדוק לפי המספר המבוקש. -
@יוסף-בן-שמעון
כמו"כ אם אני רוצה לעשות תהליך אחד שיקבל בget את מזהה הקמפיין לבדיקה, שזה בעצם אמור להיות דינאמי, אני בבעיה, אלא עלי להגדיר מראש רשימה של כל הקמפיינים הפעילים כרגע, ואז כולם יתרעננו אחת לשתי שניות, והמידע שיישלף יהיה יחסית לקמפיין המבוקש.
או אולי יש רעיון אחר?
תודה -
@חוקר תפרט קצת, מה הקליינט אמור לקבל, מידע אישי שלו או מידע כללי לכל הקמפיין? יש הרבה קמפיינים באויר או כמה אחדים? באיזו צורה הוא מזדהה, עם פרמטר ב GET או עוגיות?
-
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר תפרט קצת, מה הקליינט אמור לקבל, מידע אישי שלו או מידע כללי לכל הקמפיין? יש הרבה קמפיינים באויר או כמה אחדים? באיזו צורה הוא מזדהה, עם פרמטר ב GET או עוגיות?
בדר"כ מדובר בGET.
נניח מדובר כעת על כ-15 קמפיינים באוויר (בדר"כ אני לא סוגר מערכת אחרי קמפיין אלא המערכת ממשיכה לעבוד, מי שעדיין רוצה לשמוע לאן הגיעו..).
עד היום הייתי מגדיר בכל מערכת שישלח מראש את מזהה הקמפיין, ולפי"ז בדקתי אונליין מול צ'רידי.
בנוסף אני מקבל את מספר הטלפון של המתקשר, ומבצע עליו בדיקה האם יש מידע בצ'רידי על המספר המבוקש, ולפי"ז נותן תפריט מותאם אישית.
זאת אומרת באם המערכת זיהתה שיש מידע על המספר שלך המערכת תתן לו תפריט, "לשמיעת מצב הקמפיין הכללי הקש אחד, לשמיעת היעד האישי שלך הקש שתיים, לשל חבר שלוש".
ואם אין מידע על המספר של המתקשר, המערכת תתן לשמוע רק "לקמפיין הכלל אחד, לשמיעת יעד אישי ע"י הקשת מספר שתיים". -
@חוקר כלומר אתה מבצע שתי התקשרויות לצ'רדי עבור כל בקשה, אחת כדי לקבל מידע אישי ואחת בשביל מידע כללי נכון? אם כן, את המידע האישי לא תוכל לחסוך ותצטרך להמשיך לעשות אותו עבור כל בקשה, וכשהוא יבקש מידע כללי תוכל לתת לו את הנתון ששמרת בזיכרון.
השאלה היא האם אתה צריך לשלוח 15 בקשות כל שתי שניות ולשמור 15 משתנים, זה נראה לי קצת מוגזם, יבואו המומחים ויגידו אם ה נכון לעבוד כך או עדיף לעשות את זה רק כשהקליינט מבקש -
@יוסף-בן-שמעון
@חוקר
זה תלוי בגול הקמפיין.
עד 100 מתרימים הAPI שלהם מאפשר לקבל את כל הנתונים בבקשה אחת.
מעל זה זה כבר להוסיף בקשות.לכאורה ברגע שיש בקשה למספר מסויים שיעדכן רק אותו בליסט שמור
-
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר כלומר אתה מבצע שתי התקשרויות לצ'רדי עבור כל בקשה, אחת כדי לקבל מידע אישי ואחת בשביל מידע כללי נכון? אם כן, את המידע האישי לא תוכל לחסוך ותצטרך להמשיך לעשות אותו עבור כל בקשה, וכשהוא יבקש מידע כללי תוכל לתת לו את הנתון ששמרת בזיכרון.
השאלה היא האם אתה צריך לשלוח 15 בקשות כל שתי שניות ולשמור 15 משתנים, זה נראה לי קצת מוגזם, יבואו המומחים ויגידו אם ה נכון לעבוד כך או עדיף לעשות את זה רק כשהקליינט מבקשאכן.
זה מה שעשיתי בינתיים.
עשיתי מערך של קמפיינים שרלוונטים עבורי, והם מתעדכנים כל 2 שניות, והמידע הנשלח למאזין הינו לפי הקמפיין המופיע בGET.
מה אפשר לעשות יותר טוב? -
@clickone אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר ליסט זה במקום משתנה רגיל ש @magicode הציע לשמירה על הסכום.
במידה ויש לך כמה קמפיינים
אז אתה צריך לעשות רשימה
עם כל הקמפיינים הפעילים שלך
ולשמור לדוגמא:
מספר מערכת (שווה ערך למזהה קמפיין אצלך) => סכום שנאסף
ואת זה לעדכן כל 2 שניותזה מה שעשיתי במה שכתבתי קודם, אבל השתמשתי במערך, שמקבל ID של הקמפיין => הJSON שלו, מה העניין בליסט?
-
שאלה חדשה, בנוגע לכתיבת הקוד.
אם יש לי כזה קודif (!campaign_id || campaign_id === ''){ res.end("id_list_message=" + 't-לא הוגדר מספר קמפיין, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); }else{ if (!campaigns_data[campaign_id]){ res.end("id_list_message=" + 't-קמפיין לא מורשה במערכת, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); } else{ campaign_stats = campaigns_data[campaign_id]; } } var total = campaign_stats.data.total;
כאשר אין מספר קמפיין, או מספר הקמפיין אינו מופיע במערך של הקמפיינים הפעילים, אני מקבל בלוג
ReferenceError: campaign_stats is not defined
כי בעצם הוא ריק, ובJS כידוע זה קורא את כל הדף יחד ולא שורה שורה.
מה היא הדרך הנוחה ביותר לסדר קוד כעין זה שיהיה תקין?
כבר נידון קצת בתחילת השרשור, אך אשמח באם ניתן להמחיש על הדוגמא שכתבתי.
תודה -
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
-
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
הפונקציה בכל מקרה רצה ולא נכשלה, אבל אני רוצה ללמוד לכתוב תקין בכל מקרה.
לפחות אם אתם מלמדים אותי בכזה מסירות שיצאו פירות מעמלכם.. -
אולי תפתח אשכול חדש לכל נושא, זה מכביד 3 עמודים לנושא אחד...
-
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
אולי תפתח אשכול חדש לכל נושא, זה מכביד 3 עמודים לנושא אחד...
כעת יש לי עוד 17 הודעות עד לדף הבא, ואח"כ נעבור נושא.
או שעד אז הכל כבר יהיה מסודר בעזה"י.. -
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
@יוסף-בן-שמעון
לדעתי בשלב זה עדיף לכתוב את הדוגמאות עם תחביר הכי פשוט
בדוגמא זוif(campaign_stats) { var total = campaign_stats.data.total }
-
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
כאשר אין מספר קמפיין, או מספר הקמפיין אינו מופיע במערך של הקמפיינים הפעילים, אני מקבל בלוג
ReferenceError: campaign_stats is not definedמה שמעניין שאני קיבלתי את זה פעם אחת בלוג על כשאין מזהה ופעם נוספת כשהקמפיין אינו במערך, ולא יותר.
וזה לא נוסף ללוג בכל בקשה מחדש, רק פעם אחת לכל תרחיש. -
@אהרן @יוסף-בן-שמעון
בעצם הכי פשוט להכניס הכל ב IF הקודם.
כך:if (!campaign_id || campaign_id === ''){ res.end("id_list_message=" + 't-לא הוגדר מספר קמפיין, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); }else if (!campaigns_data[campaign_id]){ res.end("id_list_message=" + 't-קמפיין לא מורשה במערכת, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); } else{ campaign_stats = campaigns_data[campaign_id]; var total = campaign_stats.data.total; ... }