سلام دوستان..
توی مادل ادمین یه دونه متد دارم به نام isOnline که true و false برمیگردونه که مشخص کننده آنلاین و آفلاین بودن ادمین هستش..
توی ویوی خودم آنلاین بودن و آفلاین بودن ادمین رو دارم ولی خب با رفرش شدن صفحه آپدیت شده رو میتونم ببینم..
میخوام هر لحظه که کاربر آنلاین یا آفلاین بشه بلافاصله توی پیج وضعیتش اعمال بشه بدون ریفرش کردن صفحه..
فقط میدونم با ایجکس باید این کار رو انجام بدم..
ولی نمیدونم چجوری؟
ممنون میشم کمکم کنید..
بازم تاکید میکنم متد داخل مادل هست نه کنترلر..
با اینکه با ارسال های درخواست ajax به سرور میتونید وضعیت آنلاین بودن کاربران رو بگیرید ولی به هیچ وجه کار بهینه و شاید درستی نباشه. چون:
اینکه هر یک ثانیه یک درخواست بخواید بفرستید سمت سرور، باعث میشه برای ۱۰۰ کاربر، در دقیقه چیزی معادل 6000 ریکوئست داشته باشید. در حالیکه در حالت عادی شاید کمتر از 20 ریکوئست وجود داشت. نکته دوم هم اینکه دقت کار بسیار پایین هست. چون خود بک اند بصور مستقیم امکان تشیص آنلاین/آفلاین بودن کاربران رو نداره. اینکار با یک سری روش های غیر مستقیمی انجام میشه که هر کدوم نقص های زیادی داره و باعث میشه نتیجه از دقت لازم برخوردار نباشه.
روش حرفه ای و اصولی این کار استفاده از وب سوکت هست. هم باعث میشه فقط وقتی تغییری در وضعیت آنلاین/آفلاین بودن کاربران رخ میده یک پیام از سمت سرور ارسال بشه و خبری از 6000 ریکوئست بی جهت نیست. و هم اینکه با دقت بسیار بالاتر به محض آنلاین و آفلاین شدن قابلیت آپدیت داره.
توضیحات بیشتر رو میتونید از مستندات خود لاراول بخونید و مثال هاش رو ببینید:
https://laravel.com/docs/7.x/broadcasting
شما باید یه درخواست ایجکس برای کاربرانی که در پیج شما هستن بفرستین سرور. میتونیدتمام ادی هاشونو در قالب یک رشته ارسال کنید طرف سرور هم ایدیهارو باز کنید کاربرهارو در یک حلقه بخونید وضعیتشونو بیرون بیارین و نتیجه رو در قالب یک ارایه برگردونید.که اندیس این ارایه ایدی کاربر میشه مقدار هر اندیس هم وضعیت اون کاربر. بعد در سمت فرانتند با یک حلقه این ارایه رو میپیمایی و وضعیت های جدیدو ست می کنی.
نکته مهم المنت های اچ تی ام الی که وضعیت انلاین یا افلاینو نشون میدن باید به صورت زیر نام گذاری بشن
مثلا userstatus-userid
Userstatus-1
در حلقه for این المنت هارو انتخاب می کنی و مقدار جدیدو حالا عددی یا اگه کلاس بود به تگ صفحه میدی
این درخولستو هر ثانیه باید بفرستی از تابع setinterval جاوااسکریپت هم استفاده کن. توضیحاتم بیشتر کلی بود
تا حدودی فهمیدم.. یه تست بکنم ببینم به مشکلی برمیخورم یا نه..
فقط یه سوال..
برای درخواستای ajax باید روت اختصاصی تعریف کرد توی web.php دیگه؟
با اینکه با ارسال های درخواست ajax به سرور میتونید وضعیت آنلاین بودن کاربران رو بگیرید ولی به هیچ وجه کار بهینه و شاید درستی نباشه. چون:
اینکه هر یک ثانیه یک درخواست بخواید بفرستید سمت سرور، باعث میشه برای ۱۰۰ کاربر، در دقیقه چیزی معادل 6000 ریکوئست داشته باشید. در حالیکه در حالت عادی شاید کمتر از 20 ریکوئست وجود داشت. نکته دوم هم اینکه دقت کار بسیار پایین هست. چون خود بک اند بصور مستقیم امکان تشیص آنلاین/آفلاین بودن کاربران رو نداره. اینکار با یک سری روش های غیر مستقیمی انجام میشه که هر کدوم نقص های زیادی داره و باعث میشه نتیجه از دقت لازم برخوردار نباشه.
روش حرفه ای و اصولی این کار استفاده از وب سوکت هست. هم باعث میشه فقط وقتی تغییری در وضعیت آنلاین/آفلاین بودن کاربران رخ میده یک پیام از سمت سرور ارسال بشه و خبری از 6000 ریکوئست بی جهت نیست. و هم اینکه با دقت بسیار بالاتر به محض آنلاین و آفلاین شدن قابلیت آپدیت داره.
توضیحات بیشتر رو میتونید از مستندات خود لاراول بخونید و مثال هاش رو ببینید:
https://laravel.com/docs/7.x/broadcasting
بله حق با شماست منطقی نیست اینطوری درخواست رد و بدل بشه برا این کارا..
ممنون 🌷
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟