حسام موسوی
4 سال پیش توسط حسام موسوی مطرح شد
47 پاسخ

راکت با طعم websocket

درود بر همه دوستان، دوست داشتنی
آقا به بخش بحث و گفتگو راکت websocket رو اضافه کردیم، کار جالبی شده بنظرم فعلا اتفاق‌های که در زیر میگم به شکل realtime بدونِ رفرش شدن صفحه می‌افته
دو صفحه، لیست گفتگوها و صفحه داخلی گفتگو با اتفاق‌های زیر بدونه رفرش شدن صفحه آپدیت میشن

  • در صورت اضافه شدن گفتگو جدید
  • ویرایش گفتگو
  • اضافه شدن پاسخ جدید
  • ویرایش شدن پاسخ
  • حذف شدن پاسخ
  • لایک شدن گفتگو یا پاسخ

اگر دیدگاهی برای بهبود این سیستم realtime دارید، در زیر برامون بفرستید تا این سیستم رو کامل‌تر کنیم، خواهشا نظرتون مربوط به عنوان این گفتگو باشه هر پیشنهاد دیگه‌ای در مورد بخش های دیگه داشتید میتونید در گفتگو اعلان باگ در راکت یا گفتگو چه امکاناتی باید به راکت اضافه شود با ما به اشتراک بزارید


ثبت پرسش جدید
MojtabaaVDev
@MojtabaaVDev 4 سال پیش مطرح شد
3

موقع اضافه کردن اوکی بود، ولی موقع ویرایش خطای سرور داد(البته تغییرش ثبت شد).


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
1

@MojtabaaVDev
مشکل ویرایش هم حل شد سپاس از اطلاع شما


نیما - ش
تخصص : برنامه نویس وب
@nimageneral 4 سال پیش مطرح شد
2

عالی شده حسام جان 👍


محمدرضا شاهدی
@mshahedi83 4 سال پیش آپدیت شد
1

@hesammousavi
سلام، ببخشید در این صفحه زمان به روزرسانی می شود، یعنی مثلا نوشته است، که 7 دقیقه پیش توسط نیما - ش گفتگو آپدیت شد، اما وقتی به صفحه گفتگوها برمیگردم چنین چیزی را ننوشته است، هنوز نوشته است 5 دقیقه پیش توسط نیما - ش آپدیت شد، یعنی زمانی که صفحه بحث و گفتگوها باز شده بود.
اما الآن وقتی به این صفحه برگشتم، ابتدا نوشته بود 7 دقیقه پیش توسط نیما - ش آپدیت شد، اما بعد از چند ثانیه نوشت 40 ثانیه پیش توسط محمدرضا شاهدی آپدیت شد، اما وقتی برمیگردم به لیست گفتگوها باز هم نوشته است 5 دقیقه پیش توسط نیما - ش آپدیت شد.

مثلا الآن کنار گفتگوی من نوشته است 3 دقیقه پیش، اما بالای گفتگو نوشته است 1 دقیقه پیش توسط محمدرضا شاهدی آپدیت شد.

الآن یکی از کاربران پیامش را ویرایش کرد، که به درستی هم در زمان نوشت که توسط چه کسی چند ثانیه پیش گفتگو آپدیت شد، هم پیامش بدون رفرش ویرایش شد. شاید مشکلی که گفتم فقط برای شخص ارسال کننده پیش می آید.
در هر صورت ممنون از اضافه کردن این ویژگی به سایت راکت 🙏


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش آپدیت شد
3

@mshahedi83
زمانی که یک آپدیت صورت بگیره
مثلا پاسخی لایک بشه یا پاسخ جدید ارسال بشه همه اطلاعات این صفحه آپدیت میشن
اما میشه اینکارو هم کرد که زمان با بودن در این صفحه آپدیت بشه البته این ربطی به websocket نداره و میشه انجامش داد به سادگی
این مورد رو هم امروز اضافه میکنیم تا بیشتر حس realtime بودن بده


محمدرضا شاهدی
@mshahedi83 4 سال پیش مطرح شد
0

@hesammousavi
سلام، الآن وقتی در این صفحه بودم، سریع پیام شما آمد و در بالای صفحه هم نوشت که 0 ثانیه پیش توسط حسام موسوی آپدیت شد، اما وقتی برگشتم، هنوز در صفحه لیست گفتگوها نوشته بود، 5 دقیقه پیش توسط نیما - ش آپدیت شد، وقتی دوباره به این گفتگو برگشتم، نوشته بود، 1 دقیقه پیش توسط محمدرضا شاهدی آپدیت شد و پیام شما هم پاک شده بود، اما وقتی صفحه را رفرش کردم، درست شد، دقیقا نمی دانم که مشکل است، یا نه اما به نظرم بهتر است اطلاع بدهم.
حق با شماست، من با websocket آشنایی ندارم و websocket را نمی شناسم، اما طبق مواردی که در بالا نوشته بودید که باید بدون رفرش آپدیت شوند، این حرف را می زنم.


محمدرضا شاهدی
@mshahedi83 4 سال پیش آپدیت شد
0

@hesammousavi
الآن که با کلید برگشت، برگشتم به لیست و دوباره به این صفحه برگشتم، نوشته است 43 ثانیه پیش توسط حسام موسوی آپدیت شد و پیام من را پاک کرده است!
توضیح تصویر رو وارد کنید
البته با رفرش کردن صفحه مشکل حل می شود.


نیما
@shadecute3 4 سال پیش آپدیت شد
2

خیلی عالیه تبریک میگم
ممنون از شما
آموزش websocket میزارید؟


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
3

ایول دارین کارتون حرف نداره 👊


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
2

@mshahedi83
الان این تایم هم با رفرش نشدن آپدیت میشه

@juza66
مخلصیم علی جان 😅


سید حسین موسوی
تخصص : بک اند دولوپر (لاراول) فرانت (...
@shm379 4 سال پیش مطرح شد
1

خیلی جالبه ٬ جالب تر از اون اینه که ماشالله همه تستر های قوی هستیم!


محمدرضا شاهدی
@mshahedi83 4 سال پیش آپدیت شد
1

@hesammousavi
خیلی ممنون 🙏
اما باز هم وقتی این پیام را فرستادم و برگشتم به لیست گفتگوها و دوباره برگشتم به اینجا همین پیام پاک شده بود و نبود، اما بار رفرش کردن این پیام هم آمد، البته شاید هم به خاطر پاک نکردن کش مرورگر باشد، من چند بار امتحان می کنم، نتیجه را اطلاع می دهم.
مشکل هماهنگ نبودن زمان لیست گفتگوها و خود گفتگو برطرف شده است.
اما وقتی مثلا خط بالا را به متن اضافه کردم و برگشتم به لیست و دوباره برگشتم به اینجا، خط بالا نبود، فکر می کنم یک مرحله قبل را نمایش می دهد، وقتی پاسخ جدید اضافه می کنم، زمانی را نشان می دهد که آن پاسخ نبوده است، وقتی هم یک قسمتی را به متن اضافه می کند، وقتی را نشان می دهد که آن خط اضافه نشده بود. البته واقعا به نظرم این مشکل محسوب نمی شود که یکبار برگردم به لیست گفتگوها و دوباره به اینجا برگردم، تا ببینم که چرا چند تا تغییر اعمال نشده اند. اما خوب اگر مشکل است، بدین شکل است.


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
3

@shadecute3
در دوره livewire قرار دادیم روش استفاده از websocket رو
اما در یک دوره جداگانه لاراولی بدونه livewire هم قرار میدیم


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

یک سوال فنی 😅
این هدر وبسایت که هرچندثانیه یکبار درخواست AJAX میزنه به سرور فشار نمیاره ؟
آیا این درخواست ها با همون polling لایووایر هستش؟ چون تگ اینو ندیدم ؟ 😅🙏

توضیح تصویر رو وارد کنید


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
2

بنظرم آنلاین بودن کاربر رو هم مثه زمان، لایک و پست های جدید بروز کنید خیلی عالی میشه، یه 5 دقیقه صبر کردم جواب شما رو ببینم دیدم جوابی نیامد ریفرش کردم دیدم آنلاین نیستین ، در صورتی که توی صفحه زمان آپدیت شد ولی آنلاین بودن کاربر روی آواتار ریفرش نشد.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
0

یک مشکل دیگه هم هست داشتم پیام قبلی رو ویرایش میکردم صفحه یهو ریفرش شد و فرم ویرایش خالی شد، فکر کنم کاربری لایک کرده یا پیامی گذاشته باعث شده ایونت ریفرش شدن کل صفحه اجرا بشه!


علی مهدوی
تخصص : طراح و توسعه دهنده وب
@mahdavi 4 سال پیش مطرح شد
1

سلام مهندس @juza66
اون رفرش و ارسال به سرور که می بینید با عنوان layout.header اصلا منظور هدر سایت نیست اگر تب response که دریافت میشه رو نگاه کنید هیچ دیتایی برگشت داده نمیشه . به احتمال زیاد اون ریکوست ها مربوط میشه به eventlistener هست که websoocket فراخوانیش میکنه .
ولی باز یجور بهینه سازی نیاز داره چون بعضی مواقع از 500ms میگذره و یجور روی سرور فشار میاره اگه تعداد کاربر ها زیاد بشه
به نظرم باید طوری بشه که وقتی کاربر صفحه رو نمیبینه مثل wire:poll لاراول از کار بیوفته تا سرور به فشار نیوفته.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
1

سپاس @mahdavi
اره دیدم ولی سوال برام بود اگر ایونت قرار اینو هدر رو فایر کنه چرا هر چندثانیه یکبار درخواست ارسال میشه درصورتی که هیچ پیامی برام نمیاد. اگر برای همه هستش که خوب هیچ ولی اگر هدف اینه که اگر پیامی برای من کاربر قرار دریافت بشه و ایونتی فایر میشه فقط یکبار هدر درخواست زده بشه بنظرم کافیه .


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
2

@juza66
@mahdavi
اون header که شما میبینی مربوط به websocket نمیشه، این نوع از آپدیت هر چند ثانیه اتفاق می افته فشاری نمیاره ، فعلا این شکلیه تا بعدا ببینیم چیکار باید کنیم با اون
فعلا هر 20 ثانیه روی tabهای فعال هست مربوط به wire:poll میشه
درمورد انلاین بودن کاربر و این داستان‌ها کم کم اضافه میکنیم، قدم به قدم
اون مشکل ویرایش که داشتید میکردید پاک شد رو حتما بررسی میکنم و حلش میکنم


علی مهدوی
تخصص : طراح و توسعه دهنده وب
@mahdavi 4 سال پیش مطرح شد
0

@juza66 اگه قرار بر یکبار صدا زده شدن باشه که اصلا معنی realtime از بین میره . ولی اینکه به صورت اتوماتیک هر چند ثانیه یکبار بدون اینکه صفحه دیتای جدیدی داشته باشه اتفاق میوفته یجور بار اضافی رو سرور میاره و باید بهینه بشه .

چند مورد هم مورد توجه هست :
1- تاریخ انتشار گفتگو یا پاسخ گفتگو از زمانی هست که شروع به نوشتن متن داخل ادیتور میکنیم نه از زمانی که ثبت رو میزنیم که این به نظرم نیاز به اصلاح داره (اقای @mshahedi83 بهش اشاره کردند)
2- ویرایش عملا تحت تاثیر همون رکیوست های متعدد قرار میگیره و بعضا درست در زمانی اتفاق میوفته که دکمه ویرایش رو میزنیم و باعث میشه متن داخل ادیتور به کلی پاک بشه
3- بخش افزودن پاسخ قسمت تجربه بروز نمیشه تا صفحه رفرش کامل بشه (که مغایرت پیش میاد)
4- رفرش به صورت اتوماتیک صورت میگیره و کل کامپوننت پاسخ رفرش میشه و اگه از network سرعت رو کم کنیم میبینیم که دیتای عکس و متن همشون دوباره از سرور دریافت میشن که به نظرم واقعا به سرور فشار میاره و نیازی به این کار نیست
5- اینکه از websoocket به صورت کامل استفاده شده یا با ادغام wire:poll و رکوست های livewire ترکیب شده مهندس موسوی @hesammousavi باید بگن ولی اونی که مشخصه رکیوست های زیاد و بعضا بی موردی به سرور میره


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام