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

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

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

שאלה כללית ב WebSocket

מתוזמן נעוץ נעול הועבר תכנות
25 פוסטים 4 כותבים 1.7k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #1

    ידוע מהו מחזור הבקשות ב HTTP. בקליינט שולח בקשה ומאזין לתשובה לשאלה הספציפית.
    גם ב WebSocket הקליינט יכול לעשות אותו דבר.
    השאלה שלי היא האם גם השרת יכול לעשות את זה? לשלוח בקשה מסוימת לקליינט ולהאזין לאותה בקשה?
    אם-כן, מישהו יכול להנחות אותי איך לעשות או איך לחפש עזרה על מימוש כזה ב Sails.js
    תודה.

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

      בשביל שהשרת יכול ליזום תקשורת יש להחזיק סוקט פתוח.
      כלומר הלקוח יוזם פתיחת תקשורת, ואז היא נשארת פתוחה. והלקוח מאזין לקבלת מידע מהשרת.
      כעת יש שתי נושאים למימוש, צד הלקוח וצד השרת.
      צד הלקוח זה API של HTML5, והוא פשוט יחסית, ראה פה: https://www.html5rocks.com/en/tutorials/websockets/basics/

      צד השרת בnodejs תתקין חבילה, כמו ws, ואז אתה מקים שרת ממש בקלות:

      const wss = new WebSocket.Server({ port: 8080 });
      
      wss.on('connection', function connection(ws) {
        ws.on('message', function incoming(message) {
          console.log('received: %s', message);
        });
      
        ws.send('something');
      });
      

      כדי ליזום שליחת מידע ללקוחות המחוברים עליך לשמור אותם ברשימה, הנה דוגמא:

      const wss = new WebSocket.Server({ port: 8080 });
      var clients = [];
      
      wss.on('connection', c => clients.push(_ws)
      ).on('close', c => clients.splice(clients.indexOf(c), 1));
      
      function sendMessageToClient(msg){
        clients.forEach(x => x.send(msg));
      }
      

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

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

      א תגובה 1 תגובה אחרונה
      2
      • מנצפךמ מנותק
        מנצפךמ מנותק
        מנצפך
        כתב ב נערך לאחרונה על ידי
        #3

        @dovid תודה רבה.
        אני רוצה להתמקד בעניין של שאילתת get או post מצד שרת ללקוח. שהשרת ידע לחכות לתשובה ולהתייחס לנתונים בהתאם. אפשרי?

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

          @מנצפך אמר בשאלה כללית ב WebSocket:

          @dovid תודה רבה.
          אני רוצה להתמקד בעניין של שאילתת get או post מצד שרת ללקוח. שהשרת ידע לחכות לתשובה ולהתייחס לנתונים בהתאם. אפשרי?

          לא שייך get וpost אלא פשוט שליחה מהלקוח וקבלה בשרת ולהיפך.

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

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

          מנצפךמ תגובה 1 תגובה אחרונה
          2
          • מנצפךמ מנותק
            מנצפךמ מנותק
            מנצפך
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid אבל בצד לקוח יש. (מימשתי דבר כזה).

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

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

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

              connection.onmessage = function (e) {
                console.log('Server: ' + e.data);
              };
              

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

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

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

                @dovid ממש לא.
                אני מתכוון כמו שהקליינט יכול לשלוח בקשת get ב http ולהמתין לתשובה, (זה בעצם מה שעושה הדפדפן), אותו דבר הקליינט יכול לעשות ב WS. ואני שואל אם אותו דבר השרת יכול לעשות. לשלוח לקליינט ולהמתן לתשובה.

                clickoneC תגובה 1 תגובה אחרונה
                0
                • clickoneC מנותק
                  clickoneC מנותק
                  clickone
                  השיב למנצפך ב נערך לאחרונה על ידי clickone
                  #8

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

                  אין טסט כמו פרודקשן.

                  המייל שלי urivpn@gmail.com

                  תגובה 1 תגובה אחרונה
                  3
                  • dovidD מחובר
                    dovidD מחובר
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @מנצפך בא תספר מה אתה רוצה.

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

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

                    מנצפךמ תגובה 1 תגובה אחרונה
                    2
                    • מנצפךמ מנותק
                      מנצפךמ מנותק
                      מנצפך
                      השיב לdovid ב נערך לאחרונה על ידי
                      #10

                      @clickone קלע לעצם העניין. אני רוצה לייתר את מזהה ההודעה.
                      @dovid , אני רוצה לבקש מהקליינט שישלח לי איזשהו קובץ.

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

                        @מנצפך אמר בשאלה כללית ב WebSocket:

                        @clickone קלע לעצם העניין. אני רוצה לייתר את מזהה ההודעה.
                        @dovid , אני רוצה לבקש מהקליינט שישלח לי איזשהו קובץ.

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

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

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

                        מנצפךמ תגובה 1 תגובה אחרונה
                        1
                        • מנצפךמ מנותק
                          מנצפךמ מנותק
                          מנצפך
                          השיב לdovid ב נערך לאחרונה על ידי מנצפך
                          #12

                          @dovid במקרה הזה יש אינטרקציה. אין בעיה מבחינת זה. קח את זה כתיאורטי.

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

                            @מנצפך אמר בשאלה כללית ב WebSocket:

                            @dovid במקרה הזה יש אינטרקציה. אין בעיה מבחינת זה.

                            אז איפה כן הבעיה...

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

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

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

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

                              אין טסט כמו פרודקשן.

                              המייל שלי urivpn@gmail.com

                              dovidD תגובה 1 תגובה אחרונה
                              1
                              • dovidD מחובר
                                dovidD מחובר
                                dovid ניהול
                                השיב לclickone ב נערך לאחרונה על ידי
                                #15

                                @clickone אמר בשאלה כללית ב WebSocket:

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

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

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

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

                                clickoneC תגובה 1 תגובה אחרונה
                                2
                                • clickoneC מנותק
                                  clickoneC מנותק
                                  clickone
                                  השיב לdovid ב נערך לאחרונה על ידי
                                  #16

                                  @dovid
                                  אבל אצל אותו לקוח יכול להיות 10 בקשות של קבצים

                                  אין טסט כמו פרודקשן.

                                  המייל שלי urivpn@gmail.com

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

                                    @clickone אמר בשאלה כללית ב WebSocket:

                                    @dovid
                                    אבל אצל אותו לקוח יכול להיות 10 בקשות של קבצים

                                    נו אז שהבקשה תהיה please send file number 3.
                                    תתארו סיפור שלם מהתחלה לסוף כי אני מרגיש שאנחנו לא על אותו גל.

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

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

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

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

                                      dovidD תגובה 1 תגובה אחרונה
                                      1
                                      • dovidD מחובר
                                        dovidD מחובר
                                        dovid ניהול
                                        השיב למנצפך ב נערך לאחרונה על ידי
                                        #19

                                        @מנצפך אמר בשאלה כללית ב WebSocket:

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

                                        תרגיש בנח להבין מה שרצית אבל דבריך חסרי פשר בעיני.

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

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

                                        תגובה 1 תגובה אחרונה
                                        1
                                        • clickoneC מנותק
                                          clickoneC מנותק
                                          clickone
                                          השיב לdovid ב נערך לאחרונה על ידי
                                          #20

                                          @dovid
                                          ה3 זה הטוקן 😮
                                          הוא רוצה לברוח מהטוקן. זה הכל.
                                          (לחסוך כמה שורות קוד וכנראה כמה כאבי ראש 🙂 )

                                          אין טסט כמו פרודקשן.

                                          המייל שלי urivpn@gmail.com

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

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

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

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