Zen Eddin Allaham نشر 5 أكتوبر أرسل تقرير نشر 5 أكتوبر اواجه مشكلة غريبة لم افهم سبب حيث ان الرسائل تعمل بشكل عادي وفي الوقت الفعلي (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 2 اقتباس
0 Mustafa Suleiman نشر 6 أكتوبر أرسل تقرير نشر 6 أكتوبر سلسلة الإشعارات في الوقت الفعلي بها مشكلة، لأن الـ 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. اقتباس
0 عبد الوهاب بومعراف نشر 8 أكتوبر أرسل تقرير نشر 8 أكتوبر السبب أن الإشعارات لا تصل في الوقت الفعلي لأن ال frontend لا يستدعي connect() لا في useNotificationStore ولا في useMessageStore، فلا يتصل ال socket ولا تسجل مستمعات receive-notification، والرسائل تبدو لحظية فقط لأن صفحة المحادثة تعمل ب polling كل 10 ثوان، والجرس يقرأ حالة محلية تحمل مرة واحدة وليس من ال store، وفي ال backend ال NotificationGateway مسجل في NotificationModule وAppModule فتنشأ نسختان ويبقى onlineUsers فارغا في النسخة التي يستدعيها NotificationService فتظهر رسالة User not online، كما أن ال payload المرسل { receiverId, type, message, data } لا يحتوي id في الجذر بينما يتوقع ال frontend كائن INotification كاملا، فيفشل فحص التكرار ويمنع ظهور الإشعارات اللاحقة، والحل أن يستدعى connect() عند تسجيل الدخول، ويسجل ال gateway في موديول واحد فقط ويصدر منه، ويرسل الإشعار كاملا مع id في الجذر. اقتباس
0 ياسر مسكين نشر 10 أكتوبر أرسل تقرير نشر 10 أكتوبر الإشعارات لا تصل لحظيًا لأن الواجهة لا تستدعي connect() في أي مكان، فلا يتصل الـ socket ولا يوجد مستمع لـ receive-notification، بينما تبدو الرسائل فورية لأن صفحة المحادثة تجلبها من الخادم كل 10 ثوانٍ والجرس يعرض بيانات حُمّلت مرة واحدة. وفي الخادم، تسجيل NotificationGateway في موديولين ينشئ نسختين، فتُرسل NotificationService عبر نسخة لا يتصل بها أحد (لذلك يظهر "User not online")، كما أن الحمولة بلا id في الجذر فيفشل فحص التكرار في الواجهة. ابدأ باستدعاء connect() بعد تسجيل الدخول، ثم أبقِ الـ gateway في module واحد، ثم أرسل INotification كاملًا مع id. اقتباس
السؤال
Zen Eddin Allaham
اواجه مشكلة غريبة لم افهم سبب حيث ان الرسائل تعمل بشكل عادي وفي الوقت الفعلي (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
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.