با سلام خدمت همه دوستان و اساتید محترم
من یک سوال داشتم، شما فرض کنید در یک وبسایت لاراولی یک جدول user و با ستون balance (موجودی کیف پول) وجود داره، و یک api داریم که به محض اینکه رکوئست بهش میدیم از موجودی کاربر کم میکنه و آخرین موجودی رو برمیگردونه.
سوال من اینه که اگه دوتا رکوئست همزمان به سرور زده بشه چه اتفاقی رخ میده؟ بنده این مورد رو تست کردم ظاهرا رکوئست اول اجرا میشه و تا قبل از اتمام رکوئست اول به رکوئست دوم پاسخ نمیده (به رکوئست دوم خطا برمیگردونه). خب این در حالی هست که در یک دیوایس دو رکوئست ارسال شده باشه، آیا اگه در دو دیوایس همزمان رکوئست ارسال بشه بازم سرور به رکوئست دوم پاسخ نمیده؟
و اینکه چطور میشه این مورد رو مدیریت کرد که مثلا یک صف ایجاد کرد و رکوئست ها رو به ترتیب بدون اینکه اختلالی بوجود بیاد اونارو مدیریت کردو به رکوئست ها پاسخ مناسب داد.
با تشکر
سلام وقتت بخیر
همونطور که خودت و دوستان هم گفتید باید در این شرایط از Queue استفاده بشه ولی گفتم یک چیز رو اضافه کنم اونم استفاده از
DB::transaction()
بهتره زمانی که از دیتا هایی مثل مبالغ و یا در کل هر چیزی که مثل یک transaction هست از این امکان لاراول استفاده کنید تا دیتا ها در صورت مشکل آسیب نبینه
که داکیومنت رسمی لاراول اینجا میتونید مطالعه کنید
و برای Queue هم میتونید اینجا داک مورد نیاز رو بگیرید
موفق باشید
@rezasa341
سلام بهترین راه برای اینکه ریکوئستها از بین نرن همون صف هستش که خودت بهش اشاره کردی
ولی چون کار با تراکنشها حساسیت زیادی داره باید این صفها رو خوب مدیریت کنی که کاربر زیاد معطل نشه و همچنین خطایی در کار بوجود نیاد
سلام
اطلاع دارید چطور باید صف ایجاد کنم؟ اگه منبعی وجود داره بهم معرفی کنید ممنونتون میشم
سلام وقتت بخیر
همونطور که خودت و دوستان هم گفتید باید در این شرایط از Queue استفاده بشه ولی گفتم یک چیز رو اضافه کنم اونم استفاده از
DB::transaction()
بهتره زمانی که از دیتا هایی مثل مبالغ و یا در کل هر چیزی که مثل یک transaction هست از این امکان لاراول استفاده کنید تا دیتا ها در صورت مشکل آسیب نبینه
که داکیومنت رسمی لاراول اینجا میتونید مطالعه کنید
و برای Queue هم میتونید اینجا داک مورد نیاز رو بگیرید
موفق باشید
سرویس دهندهای وب (وب سرورها) می توانند بصورت موازی به درخواست های کاربران بدون مشکل جواب بدن ولی بحث سر نسخه های قدیمی زبان php هست که نمی تونه درخواست ها رو بصورت موازی جواب بده و حتما پشت سرهم اجرا میکنه، توی نسخه 8 php فیچر Asynchronous اومده و درخواست بصورت موازی رو قابل اجرا کرده.
و برای جواب خودت
دو تا رئکویست سمت سرور با یک دیوایس و در لحظه مشکلی ایجاد نمیکنه!
رئکویست اول اجرا شده میره واس رئکویست های بعدی دیگه! اینجور نیست که درخواست بعدی شما fail بشه!
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟