@יוסף-בן-שמעון אמר בתתי הפניות ב express:
כשאתה קורא ל res.end() אתה לא עוצר את הריצה של הפונקציה, אתה מסיים את התקשורת עם הקליינט, הפונקציה עצמה ממשיכה לרוץ, זה שני דברים שונים.
מאה אחוז!
תודה על הלימוד
@יוסף-בן-שמעון אמר בתתי הפניות ב express:
כשאתה קורא ל res.end() אתה לא עוצר את הריצה של הפונקציה, אתה מסיים את התקשורת עם הקליינט, הפונקציה עצמה ממשיכה לרוץ, זה שני דברים שונים.
מאה אחוז!
תודה על הלימוד
בנוד בשימוש אקספרס
האם שייך לעשות הפניות בתוך הפניות?
משהו בצורה כזו
app.all('/',(req,res) => {
res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8', 'Access-Control-Allow-Origin' : '*'});
var query = url.parse(req.url,true).query;
if (maslulim_to_api && maslulim_to_api !== {}) {
maslulim_to_api['status'] = 'OK';
}
app.all('/get_limud_yomi2',(req,res) => {
var query = url.parse(req.url,true).query;
res.end(JSON.stringify(maslulim_to_api));
});
app.all('/get_maslulim',(req,res) => {
var query = url.parse(req.url,true).query;
res.end(JSON.stringify(limud));
});
//console.log(maslulim_to_api);
});
@dovid אמר בהתקנת תעודה SSL עבור NODE:
כאמור תוכל לעשות להיפך, לשנות את הפורט של אפאצ', ולנתב עם הnginx לפי ההוסט או הפורט.
תוכל גם בכל שלב שתחליט לבטל לגמרי את האפאצ' ולעבוד רק עם nginx.
בהחלט, אבל הכלל אצלי שדבר ראשון צריך לראות שזה עובד..
@magicode תודה רבה.
בעזה"י אנסה להתקדם עם מה שכתבת
@yossiz אמר בהפעלת PM2 עם הגדרת פורט להפעלת תהליך ה node:
argv[2]
למה בחרת 2? שם הקובץ ג"כ ממוספר? א"כ אמור להיות 1 שהרי ספירה מתחילה בדר"כ מאפס
אשמח להדרכה איך ניתן להגדיר בקובץ במקום שורה זו
server.listen(3030);
להגדיר משתנה שאני מעביר מפקודת ההפעלה, בין אם זה פקודת
node app.js
ובין אם זה פקודת
pm2 start/resstart app
איך אני כותב לו את הפורט המבוקש.
תודה
אני צריך לבצע שאילתה מול שרת, ואני צריך לקבל ולטפל בתשובה הן מתוך מה שבכותרות והן מתוך מה שבתוכן הדף.
אני לא מצליח להעביר ל then הבא רק נתון אחד.
איך אני מעביר שני נתונים
משהו בסגנון הזה:
fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })
.then(res => res.json(), res.headers.get('content-type'))
.then(json, headers =>
console.log(json)
console.log(headers)
);
תודה
@clickone אמר בבדיקת עומס על שרת:
@חוקר זה נראה בסדר, אבל נחכה ל @magicode
(אני מתחיל להבין למה אומרים שNODEJS מגיב מהר כ"כ. זה מדהים המהירות)
אכן.
לא סתם בסופו של דבר התלהבתי.
ממוצע בקשה דרך הדפדפן (של שמיעת מצב הקמפיין האישי או הכללי) הוא 75 מ"ש, (ע"י אינטרנט של נטפרי 019 מאה מגה מהירות)
Concurrency Level: 4000
Time taken for tests: 1.789 seconds
Complete requests: 4000
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 1020000 bytes
HTML transferred: 468000 bytes
Requests per second: 2236.25 [#/sec] (mean)
Time per request: 1788.708 [ms] (mean)
Time per request: 0.447 [ms] (mean, across all concurrent requests)
Transfer rate: 556.88 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 33 32.9 23 77
Processing: 11 237 376.9 79 1696
Waiting: 11 237 376.9 79 1696
Total: 12 271 388.0 154 1761
Percentage of the requests served within a certain time (ms)
50% 154
66% 287
75% 313
80% 347
90% 898
95% 941
98% 1732
99% 1759
100% 1761 (longest request)
התמונה כמובן היא מהשרת הנבדק.
העליה הראשונה הייתה ב 1750 בו זמנית והשניה ב 4000.
לכאורה נראה שהכל בסדר?
מקוה שהבנתי נכון את הפלט
@clickone אמר בבדיקת עומס על שרת:
@חוקר
תדביק כאן את הפקודה (אתה יכול שלנות את הURL)
ab -k -c 1000 -n 4000 http://123.123.123.123:3030/campaign_status?ApiPhone=0501234567&go_to_folder=3&campaign_id=00000&menu=1
@אהרן @יוסף-בן-שמעון
בעצם הכי פשוט להכניס הכל ב 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;
...
}
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
הפונקציה בכל מקרה רצה ולא נכשלה, אבל אני רוצה ללמוד לכתוב תקין בכל מקרה.
לפחות אם אתם מלמדים אותי בכזה מסירות שיצאו פירות מעמלכם..
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
כל שתי שניות אתה מתעדכן מול צ'רדי בלי קשר לבקשות, ואתה שומר את המידע בזכרון (אחד המעלות הגדולות של נוד מול PHP!) וכשהקלינט שולח בקשה אתה שולף לו מיד מהזכרון את המידע האחרון שקיבלת מצ'רדי, כך הוא לא צריך להמתין למידע, והוא מקבל נתון שנכון לשתי שניות האחרונות
אז הרחתי נכון, שמשהו קורה כאן שהסקריפט והתהליך הנ"ל ירוץ קבוע.
והמידע הוא בעצם אחד לכל הבקשות.
בכך אתה מיישב את מה שהקשיתי קודם למה הוא שם את זה מחוץ ל app.all.
א"כ נותר לי רק לחשוב איך לעשות בדיקה במקביל לפי מספר הטלפון/ מספר שהוקש לבדיקת התקדמות ביעד האישי של התורם.
שם לכאורה יהיה לי בעיה לעבוד בצורה זו, שהרי אין לי צורך לבדוק את כולם, ואני חייב לבדוק לפי המספר המבוקש.
@dovid
מה היא הדרך הכי טובה להפעיל את השרת ע"י SSH שהתהליך לא יסתיים לאחר סגירת החלון, ומצד שני שניתן יהיה כל הזמן לעדכן ולהריץ שינויים?
תודה
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@dovid אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אתה ממש ממש טועה.
אתה מנסה לכופף את האוטו ללמוד לעבוד עם סוסים, היחיד שמפסיד זה אתה.
היית יכול להכביר בשאלות, נענה לך בל"נ על הכל, רק אל תכפיף את המנטליות של nodejs האסינכרונית להרגלים שלך (אני גם השתגעתי, מבטיח לך).דבר ראשון אני צריך משהו שעובד..
אח"כ נוכל להמשיך...
אני חייב להמשיך לנהל את הלקוחות והשוטף תוך כדי למידה, לשנות כיוון חשיבה לא בא כ"כ מהר, אני עושה בינתיים למידה ועבודה בצורה אסינכרונית, כשבמקביל אני לומד את העיקרונות של התחביר האסינכרוני.
הרכבת לא עוצרת.
זה משהו שאני לא עיכלתי אותו עדיין.
בכל זאת תודה לכל העוזרים, בעזה"י עוד נגיע להכל.
@dovid אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אתה ממש ממש טועה.
אתה מנסה לכופף את האוטו ללמוד לעבוד עם סוסים, היחיד שמפסיד זה אתה.
היית יכול להכביר בשאלות, נענה לך בל"נ על הכל, רק אל תכפיף את המנטליות של nodejs האסינכרונית להרגלים שלך (אני גם השתגעתי, מבטיח לך).
דבר ראשון אני צריך משהו שעובד..
אח"כ נוכל להמשיך...
@dovid @magicode
שאלה נוספת
לשם ההבנה, ברעיון זה אפשרי ותיקני לכתוב כמה קבצים נפרדים, וכל אחד יוגדר על פורט אחר, ולהפעיל אותם במקביל, ואז בעצם יש לנו כמה תהליכים של הנוד שהם פעילים בו זמנית כל אחד ליציאה אחרת?
כך היה נראה לי מהנסיונות שלי, כאשר הרצתי סקריפט חדש על פורט אחר, ושני הפורטים ממשיכים לעבוד.
האם זה בסדר?
@nigun @dovid
הCPU היה רק 20 אחוז, ואם כל זה זמן התגובה היה מאוד לאט, עקב עומס בקשות בו זמנית.
ייתכן מאוד שזה בסך הכל היה בגלל מגבלות השרת כמו ש @magicode כתב (ראית את הפלט שהדבקתי לעיל?)
הmysql הוא על אותו שרת.
אך בשלב הקודם לא השתמשתי ב SQL כלל בשלוחה זו, אלא בשליפת הנתונים מצרידי אונליין, וכעת אני חושב לשנות את זה ולשלוף את הנתונים מהשרת שלי, מתוך SQL או טקסט, ולעדכן את הנתונים במקביל ע"י סקריפט אחד, במקום שלכל משתמש תיהיה בדיקה אונליין מול צ'רידי
ואכן ייתכן שלא כ"כ קצת נתונים עדיף קובץ פשוט מאשר SQL
@dovid
תן לי להבין את ההבדל בין PHP לנוד כאשר יש לך לדוגמא 20 בקשות באותה שניה ממש.
@yossiz
כנראה שהתקנתי דרך שורת הפקודה ע"י מדריכים של התקנת LAMP וכדומה.
לא יודע להגיד מאיפה זה הוריד..