דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך עובד זרמים ב-nodejs

איך עובד זרמים ב-nodejs

מתוזמן נעוץ נעול הועבר תכנות
18 פוסטים 4 כותבים 882 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    השיב לdovid ב נערך לאחרונה על ידי
    #9

    @dovid
    אז מדוע בקוד הזה כל הדאטה נשלח בב"א?

    app.get('/test', (req, res) => {
        res.write('OK1');
        setTimeout(()=>res.write('OK2'),1500);
        setTimeout(()=>res.end('OK END'),2500);
    })
    setTimeout(()=>{
        request({url: url}, function (error, response, body) {
            console.log(body);
        });
    } ,2.5*1000);
    
    י תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      אהרן
      כתב ב נערך לאחרונה על ידי
      #10

      שאלה נוספת

      encodeStream.pipe(zlibStream).pipe(res);
      

      אני מבין שה-pipe השני מזרים את הדאטא הערוך ע"י zlibStream, איפה הוא נשמר בין 2 ההזרמות?

      מנצפךמ תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי dovid
        #11

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

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

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        א תגובה 1 תגובה אחרונה
        1
        • א מנותק
          א מנותק
          אהרן
          כתב ב נערך לאחרונה על ידי
          #12

          0_1545114797974_c2baf1e8-89c2-4e68-8561-8374e1908168-image.png

          dovidD תגובה 1 תגובה אחרונה
          0
          • מנצפךמ מנותק
            מנצפךמ מנותק
            מנצפך
            השיב לאהרן ב נערך לאחרונה על ידי
            #13

            @אהרן אמר באיך עובד זרמים ב-nodejs:

            שאלה נוספת
            encodeStream.pipe(zlibStream).pipe(res);

            אני מבין שה-pipe השני מזרים את הדאטא הערוך ע"י zlibStream, איפה הוא נשמר בין 2 ההזרמות?

            אני חושב שרק הפונקציה pipe מזרימה stream.
            write ו - end כותבים בצורה רגילה.

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              השיב לאהרן ב נערך לאחרונה על ידי
              #14

              @אהרן לא הבנתי למה אתה תוקע את התמונה הזו כתגובה לתשובתי.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              1
              • י מנותק
                י מנותק
                יוסף בן שמעון
                השיב לאהרן ב נערך לאחרונה על ידי
                #15

                @אהרן אמר באיך עובד זרמים ב-nodejs:

                @dovid
                אז מדוע בקוד הזה כל הדאטה נשלח בב"א?

                app.get('/test', (req, res) => {
                    res.write('OK1');
                    setTimeout(()=>res.write('OK2'),1500);
                    setTimeout(()=>res.end('OK END'),2500);
                })
                setTimeout(()=>{
                    request({url: url}, function (error, response, body) {
                        console.log(body);
                    });
                } ,2.5*1000);
                

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

                request(url).pipe(obj)
                תגובה 1 תגובה אחרונה
                1
                • א מנותק
                  א מנותק
                  אהרן
                  השיב לdovid ב נערך לאחרונה על ידי
                  #16

                  @dovid אמר באיך עובד זרמים ב-nodejs:

                  בקשר לשאלה השניה, אנא קרא את תשובתי הראשונה באשכול.

                  תודה על המחמאה. באמת.

                  @dovid אמר באיך עובד זרמים ב-nodejs:

                  הכתיבה בראשון גוררת כתיבה בכולם

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

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

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לאהרן ב נערך לאחרונה על ידי dovid
                    #17

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

                    הStream של הקובץ מספק את המתודה pipe ושמה יש קוד פשוט שמקבל ארגומנט מסוג Stream אחר. והוא דואג על כל פיסת מידע שהוא מביא, לעשות write בזרם שהובא לו כפרמטר.

                    אולי לא הייתי ברור במילים ש"הוא מביא" (לא ידעתי בכלל איך זה ממומש עם הevent כמו שהסביר @יוסף-בן-שמעון, כי אני מכיר את הרעיון של סטרים התיאורטי לא דוקא את מימושו בנוד), אבל ודאי שיש פה חומר קריאה ושהוא נכון. וודאי שמי שקורא בעיון את מה שכתוב פה לא יחשוב שהחומר (של הchunk הקודם) נשמר באיזה מקום.


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

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

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    י תגובה 1 תגובה אחרונה
                    0
                    • י מנותק
                      י מנותק
                      יוסף בן שמעון
                      השיב לdovid ב נערך לאחרונה על ידי יוסף בן שמעון
                      #18

                      @dovid אמר באיך עובד זרמים ב-nodejs:

                      כל הרעיון של סטרים הוא שאיננו שומר כלום בשום מקום, הוא נטו צינור.

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

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

                      תגובה 1 תגובה אחרונה
                      1

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום