اذهب إلى المحتوى
  • 0

مشكلة في اتصال Socket.io

السؤال

نشر

اواجه مشكلة غريبة لم افهم سبب حيث ان الرسائل تعمل بشكل عادي وفي الوقت الفعلي (Realtime) لكن الاشعارات لا تعمل في الوقت الفعلي ولم افهم ما تفسير وما السبب في ذلك حيث راجعت اهم ملفات والتي هي :

backend : socket.adapter.ts, notification.gateway.ts , notification-socket.gateway.ts , main.ts

frontend: socket.ts, useNotification.ts, useNotificationStore.ts 

وللعلم اني ارسل احداث في notification.service.ts وايضا قمت ب ازالة Redis حتى اكتشف هل هو تاخر بسبب redis لكن ايضا لم تكم مشكلة في ذلك 

ارفقت لكم المشروع وارجوا مساعدتي حل مشكلة 

Orvexa.zip

Recommended Posts

  • 0
نشر

سلسلة الإشعارات في الوقت الفعلي بها مشكلة، لأن الـ Socket لم يكن يُتصل في الـ Frontend حيث useNotificationStore.connect() و useMessageStore.connect() موجودان، لكن لا يُستدعيان من أي مكان في التطبيق.

بدون استدعاء connect():

  • لا يتصل الـ socket بالـ backend
  • لا تُسجل listeners لـ receive-notification
  • لا يظهر toast ولا يتحدث العداد

وصفحة المحادثة تستخدم polling كل 10 ثوانٍ، وليس socket لذلك الرسائل تبدو تعمل لأنها تُحدث دورياً، وليس لأن WebSocket يعمل للرسائل.

والجرس يستخدم myNotifications من الـ hook وهو state محلي يُحمل مرة عند mount، وليس من useNotificationStore الذي يستقبل أحداث الـ socket.

والـ NotificationGateway مسجّلاً في مكانين:

  • NotificationModule
  • AppModule

وذلك ينشئ نسختين من الـ gateway، النسخة التي يستدعيها NotificationService.sendNotification() قد تكون مختلفة عن التي تستقبل الاتصالات، فيبقى onlineUsers فارغاً ويظهر في اللوج:  User not online.

وفي الـ Backend شكل الـ payload خاطئ:

{ receiverId, type, message, data: notification }

بينما الـ frontend يتوقع INotification كاملة مع id في الجذر:

socket.on("receive-notification", (notification: INotification) => {
  const exists = state.notifications.some(
    (item) => item.id === notification.id,
  );

بدون id، فحص التكرار undefined === undefined يمنع الإشعارات التالية من الظهور.

عليك إصلاح ما سبق، ولو أردت رسائل حقيقية عبر WebSocket بدون polling 10 ثوانٍ، يمكن تحديث صفحة العقد لاستخدام useMessageStore و receive-message. 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...