Mohammed Abu Yousef نشر 5 ديسمبر 2022 أرسل تقرير نشر 5 ديسمبر 2022 مرحبا، في تطبيقات مشهورة مثل تطبيق Uber، يقوم ال system بإسناد الراكب إلى أقرب سائق، ثم إذا رفض السائق أو مر وقت معين، يقوم ال system بإسناد الراكب إلى سائق آخر، كيف يمكن عمل هذا الشيء باستخدام laravel framework ؟ 1 اقتباس
0 Adnane Kadri نشر 5 ديسمبر 2022 أرسل تقرير نشر 5 ديسمبر 2022 يمكنك الاستعانة بمفهوم جدولة المهام Task scheduling و طوابير الانتظار Queue لتنفيذ او جدولة مهمة اسناد الراكب الى السائق المستهدف والتحقق من قبول ذلك. فيكون منطق العملية مشابها لـ: عند تقديم طلب من طرف الراكب او العميل يتم اضافة مهمة اسناد الراكب للسائق الى طابور انتظار يتم مباشرة التحقق من تنفيذ او قبول المهمة عن طريق ارفاق ما يسمى بخيار تواتر frequency option للمهمة المجدولة، اذ يتم التحقق من ما ان تمت المهمة المقصودة كل مدة n من الزمن. في حالة عدم قبول اسناد المهمة خلال المدة n يتم اعادة الاسناد الى سائق آخر وهكذا. بالطبع فإن هذا هو المنطق العام للعملية. يمكنك التوسع في الفكرة أكثر. جدولة المهام (Task scheduling) في Laravel 1 اقتباس
0 Mohammed Abu Yousef نشر 5 ديسمبر 2022 الكاتب أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 4 ساعات قال Adnane Kadri: يمكنك الاستعانة بمفهوم جدولة المهام Task scheduling و طوابير الانتظار Queue لتنفيذ او جدولة مهمة اسناد الراكب الى السائق المستهدف والتحقق من قبول ذلك. فيكون منطق العملية مشابها لـ: عند تقديم طلب من طرف الراكب او العميل يتم اضافة مهمة اسناد الراكب للسائق الى طابور انتظار يتم مباشرة التحقق من تنفيذ او قبول المهمة عن طريق ارفاق ما يسمى بخيار تواتر frequency option للمهمة المجدولة، اذ يتم التحقق من ما ان تمت المهمة المقصودة كل مدة n من الزمن. في حالة عدم قبول اسناد المهمة خلال المدة n يتم اعادة الاسناد الى سائق آخر وهكذا. بالطبع فإن هذا هو المنطق العام للعملية. يمكنك التوسع في الفكرة أكثر. جدولة المهام (Task scheduling) في Laravel شكرا كتير، لكن الفكرة للأسف غير واضحة بشكل كامل عندما نأتي للناحية التقنية ممكن مصادر أكثر عن الموضوع، حتى ما أغلبك، أو يا ريت لو فيه كود لهذه العملية بحيث أقدر أفهم العملية من خلال الكود 1 اقتباس
0 Adnane Kadri نشر 5 ديسمبر 2022 أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 1 دقيقة مضت قال Mohammed Abu Yousef: شكرا كتير، لكن الفكرة للأسف غير واضحة بشكل كامل عندما نأتي للناحية التقنية ممكن مصادر أكثر عن الموضوع، حتى ما أغلبك، أو يا ريت لو فيه كود لهذه العملية بحيث أقدر أفهم العملية من خلال الكود أظن أن معرفة بسيطة بجزئيتي جدولة المهام وطوابير الانتظار في لارافيل سيكون كافيا لتصور شيفرة كاملة عن العملية الموضحة اعلاه. 1 اقتباس
0 Mohammed Abu Yousef نشر 5 ديسمبر 2022 الكاتب أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 15 دقائق مضت قال Adnane Kadri: أظن أن معرفة بسيطة بجزئيتي جدولة المهام وطوابير الانتظار في لارافيل سيكون كافيا لتصور شيفرة كاملة عن العملية الموضحة اعلاه. للأسف انا دارس الموضوعين، ومن أكثر من مصدر، لكن مش قادر أتمكن أرسم تحليل صحيح لل life cycle الخاصة بشيء مثل هيك 1 اقتباس
0 Adnane Kadri نشر 5 ديسمبر 2022 أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 2 دقائق مضت قال Mohammed Abu Yousef: للأسف انا دارس الموضوعين، ومن أكثر من مصدر، لكن مش قادر أتمكن أرسم تحليل صحيح لل life cycle الخاصة بشيء مثل هيك هل قمت بكتابة اي شيفرات او بانشاء اي مهام يمكن توجيهها للطريقة الموصوفة؟ 1 اقتباس
0 Mohammed Abu Yousef نشر 5 ديسمبر 2022 الكاتب أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 1 دقيقة مضت قال Adnane Kadri: هل قمت بكتابة اي شيفرات او بانشاء اي مهام يمكن توجيهها للطريقة الموصوفة؟ حاولت ولم ينجح للأسف، لو عندي تحليل لنظام بسيط يشمل الفكرة فقط ( يكون حققت المطلوب ) 1 اقتباس
1 Adnane Kadri نشر 5 ديسمبر 2022 أرسل تقرير نشر 5 ديسمبر 2022 بتاريخ 29 دقائق مضت قال Mohammed Abu Yousef: حاولت ولم ينجح للأسف، لو عندي تحليل لنظام بسيط يشمل الفكرة فقط ( يكون حققت المطلوب ) كتطبيق عملي للوصف السابق يمكنك القيام بالتالي: عند تقديم طلب من طرف الراكب او العميل يتم االتالي. <?php ... class RideController extends controller { /** * حجز رحلة * * @return void */ public function book(){ // انشاء رحلة جديدة وسائق معين $ride = Ride::create([ 'user_id' => auth()->id() , 'driver_id' => 'RANDOM_DRIVER_ID']); // انشاءرحلة مجدولة ScheduledRide::create([ 'ride_id' => $ride->id ]); // تنبيه السائق عن رحلة جديدة event(new NotifyDriverByRideEvent($scheduledRides->ride)); } } لاحظ وجود انموذج بيانات Ride يعبر عن الرحلة التي قام المستخدم بحجزها. في ذات الوقت تم انشاء رحلة مجدولة تعبر عن مهمة جدولة الرحلة. ويتم تمثيل ذلك بانموذج ببيانات آخر هو ScheduledRide سنحتاج الآن جعل هاته الرحلات المجدولة مهام يتم تحميلها بشكل ديناميكي من طرف المجدول. ليمكن التحقق مثلا من ما ان كانت الرحلة قبلت من السائق خلال الخمس دقائق الماضية او هي معلقة. بملف app/Console/Kernel.php سنحتاج عرض كامل الرحلات المعلقة او المجدولة والتحقق مثلا من ما ان قام السائق بقبول الرحلة أو لا: /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { /* جلب كاملة الرحلات المجدولة */ $scheduledRides = ScheduledRide::all(); // المرور على كامل الرحلات المجدولة foreach ($scheduledRides as $scheduledRide) { $schedule->call(function() use($scheduledRide) { // التحقق من ما ان قبلت الرحلة من طرف السائق if($scheduledRide->ride->is_approved_by_driver){ // ان كانت الرحلة قد قبلت لن نحتاج ان تكون الرحلة مجدولة او معلقة فهي تامة $scheduledRide->delete(); }else{ // اما في غير ذلك // سنعدل الرحلة التي تمثل الرحلة المجدولة هاته ونسندها لسائق جديد $scheduledRide->ride->update(['driver_id' => 'NEW_DRIVER_ID']); // وبالطبع ننبه السائق الجديد ايضا event(new NotifyDriverByRideEvent($scheduledRide->ride)); // .. ولما لا اخبار السائق السابق بان الرحلة قد فاتته // او استعمال ذلك في حساب معدل ادائه في التطبيق } })->everyTenMinutes(); // ضع اي خيار تواتر يوافق حاجتك او حاجة العملاء } } طبعا الفكرة تحتاج تنظيما وتنظيفا اكثر، ولكن ستتجه بشكل او بآخر نحو ذات المفاهيم. 1 اقتباس
السؤال
Mohammed Abu Yousef
مرحبا، في تطبيقات مشهورة مثل تطبيق Uber، يقوم ال system بإسناد الراكب إلى أقرب سائق، ثم إذا رفض السائق أو مر وقت معين، يقوم ال system بإسناد الراكب إلى سائق آخر، كيف يمكن عمل هذا الشيء باستخدام laravel framework ؟
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.