البرنامج النصي الطويل في المسؤول، المهمة في سيمفونيا؟

StackOverflow https://stackoverflow.com/questions/1658003

  •  11-09-2019
  •  | 
  •  

سؤال

في لوحة الإدارة، عندما يختار المشرف إجراء، سيتم تحميل البيانات من API وحفظه إلى DB. قد يستغرق الأمر من 2 ثانية إلى 3 دقائق، اعتمادا على ما يستورده.

كيف يمكنني أن أفعل في Symfony لإنشاء مثل موضوع، وبالتالي فإن المسؤول لا ينتظر الانتهاء. وعندما انتهى أخبره أن يتحقق من النتيجة؟

هل المهام الإجابة لهذه المشكلة؟

شكرا!

هل كانت مفيدة؟

المحلول

ليس Symfony الخاص، ولكن سترغب في انطلاق بعض عملية الخلفية.

أنا لست على دراية بأدوات Symfony للحصول على البرامج النصية لسطر الأوامر، لكنني أعتقد أن هناك أشياء يمكنك استخدامها.

ثم في وحدة التحكم الخاصة بك، فأنت تريد شيئا تقريبا (على افتراض أنك على مضيف Unixy):

public function executeYourBackgroundTask(){

    // first, you might want to create some kind of entry in a table to keep track of jobs.
    // Imagine you've got a table to keep track of this stuff
    $job = new Backgroundjob();
    $job->user_id = $this->getUser()->getId();
    $job->starttime = time();
    $job->someArgument = $someArgument; //anything the job script needs for input.
    $job->save();


    $jobId = $job->getId();

    //start a job in the background.
    exec('php /path/to/your/background/script.php ' . $jobId .' &');

    //your view should just tell the user "Your job is being processed, you'll be notified when it is done"
}

يجب أن تأخذ عملية الخلفية الخاصة بك (في /path/to/your/background/script.php) مرت اليد، والاستيلاء على سجل الوظيفة، واستخدام أي مدخلات مخزنة لتشغيل المهمة. عندما يتم ذلك الاستيلاء على البيانات وحشوها في قاعدة البيانات، يجب أن تقوم بتعيين وقت بعد في الجدول (الذي يصادف المهمة كاملة)، ثم افعل ما تريد القيام به لإخطار المستخدم (إرسال بريد إلكتروني، أو إدراج بعض نوع من الصف في جدول الرسائل، إلخ)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top