פניה לסרבר באמצעות HttpClient

קדם Forums הייטק Web Development פניה לסרבר באמצעות HttpClient

  • פניה לסרבר באמצעות HttpClient

    פורסם ע"י ד  הייטק on 27/03/2023 ב1:41 pm

    היי,

    אני פונה לסרבר (ב C#) מקליינט שכתוב באנגולר באמצעות הסיפריה HttpClient.

    ההאזנה לקריאה מתבצעת באמצעות subscribe.

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

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

    ניסיתי להשתמש באופציה של pipe(take(1)).subscribe(…),וכן להגדיר timeOut, אך ללא הועיל…

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

    תודה.

    מרים לוי הגיבה לפני 1 שנה, 1 חודש 3 חברות · 3 תגובות
  • 3 תגובות
  • רעות שטרן-גרינברג

    חברה
    חברה
    28/03/2023 ב7:52 am

    את יכולה לנסות את זה<div>

    async someMethod() {

    const response = await this.httpClient.get(‘https://some-server.com/some-path’).toPromise();

    console.log(response);

    }

    או את זה:

    import { debounceTime } from ‘rxjs/operators’;

    httpClient.get(‘/some/api’).pipe(

    debounceTime(500)

    ).subscribe((response) => {

    // handle response here

    });

    או להגדיר retry(0) ואז הוא לא יפנה שוב לסרבר עד קבלת תשובה …

    </div>

    • ד

      הייטק
      חברה
      28/03/2023 ב8:23 am

      היי,

      ראשית, תודה על התייחסותך…

      ניסיתי כבר בעבר את האופציה של async ו await,
      הוא באמת ממתין לתשובה ולא ממשיך לבצע את המשך הפונקציה, אך הבעיה עדיין קיימת, מנסה לשלוח שוב.

      לגבי ה debounceTime – מעדיפה פתרון שלא מבוסס על הגדרה של זמן. אורך הפעילות בסרבר עשוי להשתנות בהתאם לעומס שבשרת.

      retry(0) – גם לא עוזר… (למיטב הבנתי זו הגדרה שאומרת כמה פעמים לנסות שוב במקרה שיש שגיאה…)

      • מרים לוי

        הייטק
        חברה
        28/03/2023 ב9:41 am

        היי
        שאלתי בשבילך את צאט ג’יפיטי והוא המליץ להשתמש ב async/await גם בצד שרת וגם בצד לקוח.
        להלן התשובה המלאה:

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

        1. שימוש בפונקציית async/await בקליינט ובסרבר – ניתן לכתוב את הפונקציה המקורית בסרבר כפונקציה אסינכרונית שמשתמשת ב async/await למניעת החזרת תשובה לקליינט עד שסיימה את הפעולה המורכבת. בקליינט גם ניתן להשתמש ב async/await כדי לחכות לתשובה מהסרבר לפני שנעבור לשלב הבא בקוד.

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

        בכל אופן, אני ממליץ להשתמש בפונקציות async/await על מנת למנוע כפל בקשות לסרבר וגם להבטיח שהיישום ימשיך לתפקד גם במהלך המתנה לתשובה מהסרבר.

        בהצלחה!

Log in to reply.

מעוניינת בפרסום

חשוב: לא כל פרסום מאושר, נא לפרט בדיוק במה מדובר

ניתן לפנות גם במייל ל: [email protected]

מה את מחפשת?

מילות מפתח פופולריות לפי תחומים

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

דילוג לתוכן