יצירת תור לבקשות API
-
אני מנסה להתחבר לAPI
שבנוי בצורה של קבלת טוקן ואחר כך קבלת עוד טוקן פנימי לפעולה ספציפית ואחר כך הפעולה
כל טוקן הוא חד פעמי
ואם מקבלים טוקן פעמיים הראשון נדרס
הבעיה שלי היא שאם מתחברים אלי (מימות ) שתי משתמשים בו זמנית
הראשון מתחבר ומקבל טוקן ואחר כך מגיע השני ומקבל טוקן חדש ודורס את הראשון
כשהשני מגיע לבצע את הפעולה המערכת אומרת שהטוקן לא תקף
חשבתי על פתרון וזה להכניס את כל הבקשות למסד ולבצע את הבקשות אחד אחרי השני מהישן לחדש
השאלה היא איך אני מריץ משהו תמידי שכל הזמן יבדוק אם יש עכשיו בקשות ממתינות במסד ויבצע אותם אחד אחרי השני
לעשות cron וכל פעם יטפל רק בבקשה אחת
זה לא יעיל כי זה רק כל דקה וזה מידי הרבה זמן
אם אני עושה cron ולולאה שיריץ את כולם עד שיגמור
זה יכול להתנגש אם לא יגמור את כל הבקשות בתוך דקה
אני מעדיף פתרון בPHP אבל אפשר גם בשפות אחרות@nigun אתה מדבר על TTS אולי?
אני בניתי לעצמי משהו, אחרי שחפרתי באינטרנט ומצאתי שזה הפתרון הכי פשוט, של בדיקה האם קובץ מסוים קיים, ואם כן להמתין.אצלי היה צורך אחר, שלא יהיו בשום אופן 2 קריאות לAPI בו זמנית.
ובעצם השתמשתי במטמון של קובץ, כי ב PHP לא קיים מטמון נורמלי.
ומיהרתי (?) את זה ע"י בדיקה שהקובץ לא קיים, ואם הקובץ קיים, בודק גם את תאריך השינוי האחרון, לוודא שלא היה קריסה או שהסקריפט נגמר לפני שמחק את הקובץ. כך שאם הקובץ השתנה לפני יותר מ 8 שניות, הוא מחק אותו.
כמובן שכל הבדיקה מבוצעת בלולאה עם USLEEP של XXX אלפיות שנייה. -
@nigun אתה מדבר על TTS אולי?
אני בניתי לעצמי משהו, אחרי שחפרתי באינטרנט ומצאתי שזה הפתרון הכי פשוט, של בדיקה האם קובץ מסוים קיים, ואם כן להמתין.אצלי היה צורך אחר, שלא יהיו בשום אופן 2 קריאות לAPI בו זמנית.
ובעצם השתמשתי במטמון של קובץ, כי ב PHP לא קיים מטמון נורמלי.
ומיהרתי (?) את זה ע"י בדיקה שהקובץ לא קיים, ואם הקובץ קיים, בודק גם את תאריך השינוי האחרון, לוודא שלא היה קריסה או שהסקריפט נגמר לפני שמחק את הקובץ. כך שאם הקובץ השתנה לפני יותר מ 8 שניות, הוא מחק אותו.
כמובן שכל הבדיקה מבוצעת בלולאה עם USLEEP של XXX אלפיות שנייה. -
@chagold
לא כל כך הבנתי מה יצא שם
ושכחתי לציין שלא טוב לי לולאה אינסופית עם sleep וכדו'
או קריאות מסקריפט א' לסקריפט ב' וב' קורא חזרה לא'
כי אז אם השרת נופל ל2 שניות התהליך מת -
עכשיו נפל לי האסימון
אני צריך לעשות את הנעילה על השלב של הפעלת הסקריפט בלולאה מתוך הנתונים בDB
ולהפעיל כל דקה עם cron
וכדי למנוע אפשרות שסקריפט לא יגמר והcron יפעיל את הסקריפט שוב
אני עושה נעילה שאם הנעילה = true אז או שיפסיק או שיכנס ללולאת שינה
אני לא יכול לעשות את זה על הפעולה עצמה ושהמאזין יחכה בתור על הקו
כי יכול להיות שהמאזין יתקע חצי דקה על הקו עם שקט ואז הוא יחשוב שזה לא עובד
(אלא אם כן אני בונה את זה לבד באסטריסק ואז אני יכול לשים לו מוזיקה)
אמנם יש לי בעיה אם פעולה לא בוצעה בהצלחה המאזין לא ידע את זה
ויצטרך לחזור לקו בשביל לשמוע הודעה שים לב הפעולה האחרונה נכשלה
@chagold
טריגר בד"ב לא יעזור לי כי אני צריך לבצע פעולה בPHP עם הנתונים שנמצאים בד"ב
ולא לבצע פעולה בד"ב כמו עדכון/כתיבה/מחיקהלגבי הנעילה הזאת מישהו יודע מה ההבדל בין נעילה לבין פשוט לכתוב בקובץ טקסט 1 ובשחרור לכתוב 0?
-
-
@WWW מה שעשית נחשב המצאת הגלגל, וגם עבודה שחורה.
המצאת הגלגל למה? כי זה מושג שלא רק אתה צריך. אז למה לעבוד עם טריקים משלך ולא לבנות על ניסיון האחרים?
עבודה שחורה למה? כי בקוד שלך נהיה לכלוך. בדיקת קיום, בדיקת תאריך, מרחק בשניות ואם תהיה בעיה סימן שיש נפילה אחרת עליה לא חשבת...הבעיה בקוד שלך הוא שהוא לא מכסה מקרה בו יהיו שתי קריאות ממש בבת אחת.
במקרה כזה השורה שבודקת אם הקובץ קיים תבוצע ביחד, ולשני הקריאות התוצאה תהיה חיובית כי הקובץ באמת לא קיים.
ואז שני הקריאות יהיו בתוך הבלוק.
(זה קורה בPHP כי הוא מבוסס טרידים וכל בקשה יכולה לרוץ במקביל שזה מעלה. בנוד בגלל החיסרון של התהליך יחיד זה לא יכול לקרות אלא"כ יש פורק לאפליקציה). -
@WWW מה שעשית נחשב המצאת הגלגל, וגם עבודה שחורה.
המצאת הגלגל למה? כי זה מושג שלא רק אתה צריך. אז למה לעבוד עם טריקים משלך ולא לבנות על ניסיון האחרים?
עבודה שחורה למה? כי בקוד שלך נהיה לכלוך. בדיקת קיום, בדיקת תאריך, מרחק בשניות ואם תהיה בעיה סימן שיש נפילה אחרת עליה לא חשבת...הבעיה בקוד שלך הוא שהוא לא מכסה מקרה בו יהיו שתי קריאות ממש בבת אחת.
במקרה כזה השורה שבודקת אם הקובץ קיים תבוצע ביחד, ולשני הקריאות התוצאה תהיה חיובית כי הקובץ באמת לא קיים.
ואז שני הקריאות יהיו בתוך הבלוק.
(זה קורה בPHP כי הוא מבוסס טרידים וכל בקשה יכולה לרוץ במקביל שזה מעלה. בנוד בגלל החיסרון של התהליך יחיד זה לא יכול לקרות אלא"כ יש פורק לאפליקציה).@dovid אמר ביצירת תור לבקשות API:
המצאת הגלגל למה? כי זה מושג שלא רק אתה צריך. אז למה לעבוד עם טריקים משלך ולא לבנות על ניסיון האחרים?
אדרבה, אני פתוח להצעות...
מצאתי כל מיני פתרונות שבנויים על מטמון קבצים, לא יודע איך הם מתמודדים עם 2 בקשות בו זמנית, חשבתי לעצמי שלא כדאי לי להתקין את כל התלויות שלהם בשביל איזה מקום אחד קטן שאני צריך את זה.אני בעצם חיפשתי משהו כמו משתנה PHP ברמת שרת.
אבל לא מצאתי דבר כזה.אשמח לקבל המלצות.
-
@WWW מה שעשית נחשב המצאת הגלגל, וגם עבודה שחורה.
המצאת הגלגל למה? כי זה מושג שלא רק אתה צריך. אז למה לעבוד עם טריקים משלך ולא לבנות על ניסיון האחרים?
עבודה שחורה למה? כי בקוד שלך נהיה לכלוך. בדיקת קיום, בדיקת תאריך, מרחק בשניות ואם תהיה בעיה סימן שיש נפילה אחרת עליה לא חשבת...הבעיה בקוד שלך הוא שהוא לא מכסה מקרה בו יהיו שתי קריאות ממש בבת אחת.
במקרה כזה השורה שבודקת אם הקובץ קיים תבוצע ביחד, ולשני הקריאות התוצאה תהיה חיובית כי הקובץ באמת לא קיים.
ואז שני הקריאות יהיו בתוך הבלוק.
(זה קורה בPHP כי הוא מבוסס טרידים וכל בקשה יכולה לרוץ במקביל שזה מעלה. בנוד בגלל החיסרון של התהליך יחיד זה לא יכול לקרות אלא"כ יש פורק לאפליקציה). -
@nigun
אתה מערב מה שאתה רוצה עם מה שאתה יודע וניסית וזה מקשה על הבנת השאלה.
האם הניסוח הבא נכון:
אתה רוצה שבעת שגולש אחד נכנס תבוצע פעולה א' ובאם בעוד הפעולה מבוצעת ייכנס שני אז תישמע מוזיקה לשני עד שהפעולה של א' תיגמר ואז תתחיל פעולה ב'? -
@dovid
צודק אני קצת חלש בניסוחים
אבל הבנת נכון
אבל לא חייב להיות מוסיקה
יכול להיות הודעה הפעולה תתבצע בדוקת הקרובות
אמנם עדיף מוזיקה אבל זה לא אפשרי בימות המשיח -
@dovid אמר ביצירת תור לבקשות API:
המצאת הגלגל למה? כי זה מושג שלא רק אתה צריך. אז למה לעבוד עם טריקים משלך ולא לבנות על ניסיון האחרים?
אדרבה, אני פתוח להצעות...
מצאתי כל מיני פתרונות שבנויים על מטמון קבצים, לא יודע איך הם מתמודדים עם 2 בקשות בו זמנית, חשבתי לעצמי שלא כדאי לי להתקין את כל התלויות שלהם בשביל איזה מקום אחד קטן שאני צריך את זה.אני בעצם חיפשתי משהו כמו משתנה PHP ברמת שרת.
אבל לא מצאתי דבר כזה.אשמח לקבל המלצות.
@WWW כשקראתי את הודעתך הבנתי שמטרתך הייתה רק מניעה של קוד לעבוד במקביל, ובשביל זה הבאתי קוד שאף אחד לא אישר אם הוא עובד (כלומר שהבקשה השניה מחכה לסיום הראשונה).
אם יש לך מטרה של מטמון אשמח לפירוט ואשמח להראות לך שדברים כאלה אמורים להיות פשוטים יותר וטריקיים פחות. -
@nigun בלי קשר לשאלתך, אני לא יודע איך בPHP+ימות אתה יכול להשמיע הודעה ("אנא המתן") ולאחר הפעולה לעדכן על כך.
אם את החלק הזה אתה יודע אשמח לקוד והמחשה לעניין.@dovid
בימות אי אפשר לעשות מוזיקה בהמתנה לפעולה (ובארטריסק אפשר)
מה שכן אפשר לעשות הודעה "אנא המתן" ומעבר לשלוחה נוספת שבודקת האם הפעולה בוצעה
אם עדיין לא בוצע הפעולה משמיע הודעה של כמה שניות מוזיקה
ואחר כך מפנה שוב לאותה שלוחה (של הבדיקה) שוב ושוב עד שמקבל תשובה הפעולה בוצעה/נכשלה ועובר לתפריט הבא
(צריך לעשות מעבר נקי בין הסוף של הקובץ מוזיקה להתחלה שלא ישמע מוזר) -
@nigun בנוד אפשר לעשות את זה מסודר עם אירועים, תודיע אם זה רלוונטי להוסיף פרטים
@יוסף-בן-שמעון אמר ביצירת תור לבקשות API:
@nigun בנוד אפשר לעשות את זה מסודר עם אירועים, תודיע אם זה רלוונטי להוסיף פרטים
לא נראה לי שאני ארוץ כל כך מהר ללמוד נוד
אבל מעניין אותי מה ה mindset בנוד
אז רק אם יש לך זמן תכתוב כאן את הכיוון -
@WWW כשקראתי את הודעתך הבנתי שמטרתך הייתה רק מניעה של קוד לעבוד במקביל, ובשביל זה הבאתי קוד שאף אחד לא אישר אם הוא עובד (כלומר שהבקשה השניה מחכה לסיום הראשונה).
אם יש לך מטרה של מטמון אשמח לפירוט ואשמח להראות לך שדברים כאלה אמורים להיות פשוטים יותר וטריקיים פחות.@dovid אמר ביצירת תור לבקשות API:
@WWW כשקראתי את הודעתך הבנתי שמטרתך הייתה רק מניעה של קוד לעבוד במקביל, ובשביל זה הבאתי קוד שאף אחד לא אישר אם הוא עובד (כלומר שהבקשה השניה מחכה לסיום הראשונה).
וואוו פיספתי...
בינתיים נראה שזה עובד מצוין!
צריך לבדוק מה קורה אם התהליך קורס / הסקריפט מסתיים באמצע?איך הגעת לזה?
-
איזה קטע אפשר לעשות cron גם בפחות מהבדלים של דקה
https://stackoverflow.com/questions/30295868/how-to-setup-cron-job-to-run-every-10-seconds-in-linux -
@dovid אמר ביצירת תור לבקשות API:
@WWW כשקראתי את הודעתך הבנתי שמטרתך הייתה רק מניעה של קוד לעבוד במקביל, ובשביל זה הבאתי קוד שאף אחד לא אישר אם הוא עובד (כלומר שהבקשה השניה מחכה לסיום הראשונה).
וואוו פיספתי...
בינתיים נראה שזה עובד מצוין!
צריך לבדוק מה קורה אם התהליך קורס / הסקריפט מסתיים באמצע?איך הגעת לזה?
-
@dovid
בימות אי אפשר לעשות מוזיקה בהמתנה לפעולה (ובארטריסק אפשר)
מה שכן אפשר לעשות הודעה "אנא המתן" ומעבר לשלוחה נוספת שבודקת האם הפעולה בוצעה
אם עדיין לא בוצע הפעולה משמיע הודעה של כמה שניות מוזיקה
ואחר כך מפנה שוב לאותה שלוחה (של הבדיקה) שוב ושוב עד שמקבל תשובה הפעולה בוצעה/נכשלה ועובר לתפריט הבא
(צריך לעשות מעבר נקי בין הסוף של הקובץ מוזיקה להתחלה שלא ישמע מוזר) -
@WWW ממה שאני מבין זה משתחרר גם במקרה קריסה (כה הבנתי פה https://stackoverflow.com/a/13522356/1271037).
עכ"פ גם אם לא היה ככה היה אפשר לעטוף את הבפנים בtry catch, ואז השחרור מובטח גם במקרה קריסה (של הקוד, לא של תהליך הPHP כמו כשל במחשב).