בקשה | ניהול תור בשרת
-
@עידו300 בשביל זה יש גוגל או GPT, זה ממש דברים בסיסיים של השפה (אגב אם אתה יודע רק C# למה אתה רוצה לכתוב את הקוד הזה דווקא בPHP?)
לשמור מידע בPHP שרץ פר בקשה על ידי שרת האינטרנט - SESSION, קובץ JSON, דאטהבייס... אבל מהתיאור שלך לא היה נשמע שזה צריך לרוץ דווקא כתגובה לבקשה אלא יכול גם לרוץ ברצף ברקע -
@צדיק-תמים כתב בבקשה | ניהול תור בשרת:
@עידו300 אם זה שרת רגיל למה אתה לא מתקין עליו C#?
כי אני לא מבין בזה כלום...
גם נראה לי שהשרת חלש מאוד ואין לו הרבה זכרון.אני מצליח להסתדר עם כתיבת קוד וספריות תראה לדוגמא את עמוד הבית (שכבר לא בתוקף אבל עוד פעיל...) בניתי לבד בהכוונת GPT היה קשוח אבל הסתדרתי, בניתי גם כמה API שהייתי צריך (אתה יכול לראות ב023130310 שלוחה 2), אבל תכלס לעומק לא יודע מה עושים.
-
@צדיק-תמים זו ההצעה של GPT
<?php define('QUEUE_FILE', 'queue.json'); // קובץ שישמור את התור // פונקציה לקרוא את התור מהקובץ function loadQueue() { if (!file_exists(QUEUE_FILE)) { file_put_contents(QUEUE_FILE, json_encode([])); } return json_decode(file_get_contents(QUEUE_FILE), true); } // פונקציה לשמור את התור לקובץ function saveQueue($queue) { file_put_contents(QUEUE_FILE, json_encode($queue, JSON_PRETTY_PRINT)); } // פונקציה לעדכן את התור function updateQueue($newData, $validLocation) { $queue = loadQueue(); // קריאת התור הקיים // סינון האנשים שרק מהמיקום הרצוי $filteredData = array_filter($newData, function ($person) use ($validLocation) { return $person['location'] === $validLocation; }); // יצירת רשימה של שמות בלבד $newNames = array_column($filteredData, 'name'); // שמירה על סדר: מי שכבר בתור - נשאר $updatedQueue = array_values(array_intersect($queue, $newNames)); // הוספת חדשים לסוף foreach ($newNames as $name) { if (!in_array($name, $updatedQueue)) { $updatedQueue[] = $name; } } saveQueue($updatedQueue); // שמירת התור המעודכן return $updatedQueue; } // קבלת הנתונים מהשרת (הדמיה של POST) $dataFromServer = json_decode(file_get_contents('php://input'), true); // רק מי שנמצא במקום 6 ייכנס לתור $validLocation = "6 "; // עם רווח אחרי ה-6 כפי שביקשת // עדכון התור והחזרת התוצאה $resultQueue = updateQueue($dataFromServer, $validLocation); echo json_encode($resultQueue); ?>
-
@צדיק-תמים איך עושים שהוא ירוץ כל הזמן?
בגדול, אני מתלבט בין 2 אופציות:- שיהיה טריגר שיתחיל את הקוד (בשביל למנוע בזבוז תעבורת רשת ע"י שליחת סתם בקשות מיותרות), ואז הוא ישלח כל כמה שניות לבדוק את המצב שעד שהתור יתרוקן ואז הקוד יעצור. הבעיה כאן היא שאם הטריגר יפעל שוב, הקוד ירוץ שוב במקביל וזה יעשה בלאגן אחד שלם.
- שירוץ כל הזמן בלי טריגר, ואז אין חשש לכפילויות, אבל אז יש בזבוז תעבורת רשת, שעולה כסף כמובן. ועוד בעיה, שאני לא יודע איך עושים שירוץ כל הזמן, מה שאני יודע זה שקוראים לו הוא מתחיל לרוץ, לא יודע איך גורמים לרוץ בלי הפסקה.
אגב, תודה על כל העזרה.
-
@עידו300 אפשר להריץ PHP דרך שרת האינטרנט, לדוגמה nginx, ואז התהליך מת בסוף כל בקשה, ואפשר פשוט להריץ אותו בשורת הפקודה כמו כל תוכנה (בתוספת
nohup
בהתחלה או&
בסוף כדי שהתהליך ימשיך לרוץ אחרי התנתקות מהשרת), כלומרphp script.php &
אתה יכול להשתמש ב pm2 בשביל ניהול יותר נוח, הפעלה אוטומטית בהפעלת המחשב וכולי
הקוד יכול לרוץ רצוף, זה לא אומר שהוא צריך לעשות פעולות רצוףנ.ב. אל תחשוב על תעבורת רשת בכלל כשמדובר על העברת קצת טקסט