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

السؤال

Recommended Posts

  • 0
نشر

في حال ستقوم بنشر المشروع على استضافة Vercel فلن تستطيع استخدام WebSockets في صورتها العادية مثل socket.io مدمج داخل API Routes لأن Vercel تعتمد على Serverless Functions، وتلك الدوال تعمل لثوانٍ معدودة لرد الطلب ثم تموت أي Stateless، بينما الـ WebSocket يحتاج اتصال دائم ومفتوح Stateful.

لذا ستحتاج إلى خدمة خارجية لإدارة الاتصال مثل Pusher أو Ably أو إنشاء سيرفر منفصل للـ Sockets.

وعلى الاستضافات الأخرى لا مشكلة، بدمج Express مع Next.js في نفس التطبيق واستخدام socket.io ولكن الأمر سيصبح معقد وستفقد بعض ميزات Next.js.

الأفضل تشغيل سيرفر Next.js بشكل طبيعي، وإنشاء سيرفر Express صغير منفصل مسؤول فقط عن الـ WebSockets.

والأسهل هو الإعتماد على خدمة سحابية مثل Pusher، حيث لن تحتاج لسيرفر Express وسيقوم Next.js بإرسال حدث إلى Pusher عند وصول طلب جديد، وPusher يتولى إرسال التنبيه للوحة التحكم فورًا.

المشكلة في الباقة المجانية المحدودة وعند استنفاذها ثم تصبح مدفوعة أي تحتاج لترقية الإشتراك والدفع في Pusher.

في حال أردت عدم الإشتراك، فقم بإنشاء تطبيق Next.js بشكل عادي، ثم تنشئ سيرفر Node.js بسيط من خلال Express.js وظيفته فقط استقبال وإرسال التنبيهات.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته،

أولا ف Vercel لا يدعم WebSockets التقليدية مثل socket.io داخل API Routes بسبب اعتمادها على Serverless Functions التي تكون stateless وتنتهي بعد ثوان معدودة مما يمنع الاتصالات الدائمة المطلوبة ل WebSockets.

أما بالنسبة لنظام تتبع طلبات المطعم على Vercel الأفضل استخدام خدمة خارجية مثل Pusher أو Ably فلها باقة مجانية محدودة ثم مدفوعة حيث يرسل Next.js الأحداث إليها عبر HTTP وتتولى إشعار لوحة التحكم فورا دون سيرفر إضافي.

أو يمكنك إنشاء سيرفر Node.js/Express بسيط منفصل ل WebSockets فقط وانشره على Render أو Railway مع ربط Next.js به عبر عنوان السيرفر، وهذا سيحافظ على ميزات Vercel لل frontend.

  • 0
نشر
بتاريخ 18 دقائق مضت قال Mustafa Suleiman:

في حال ستقوم بنشر المشروع على استضافة Vercel فلن تستطيع استخدام WebSockets في صورتها العادية مثل socket.io مدمج داخل API Routes لأن Vercel تعتمد على Serverless Functions، وتلك الدوال تعمل لثوانٍ معدودة لرد الطلب ثم تموت أي Stateless، بينما الـ WebSocket يحتاج اتصال دائم ومفتوح Stateful.

لذا ستحتاج إلى خدمة خارجية لإدارة الاتصال مثل Pusher أو Ably أو إنشاء سيرفر منفصل للـ Sockets.

وعلى الاستضافات الأخرى لا مشكلة، بدمج Express مع Next.js في نفس التطبيق واستخدام socket.io ولكن الأمر سيصبح معقد وستفقد بعض ميزات Next.js.

الأفضل تشغيل سيرفر Next.js بشكل طبيعي، وإنشاء سيرفر Express صغير منفصل مسؤول فقط عن الـ WebSockets.

والأسهل هو الإعتماد على خدمة سحابية مثل Pusher، حيث لن تحتاج لسيرفر Express وسيقوم Next.js بإرسال حدث إلى Pusher عند وصول طلب جديد، وPusher يتولى إرسال التنبيه للوحة التحكم فورًا.

المشكلة في الباقة المجانية المحدودة وعند استنفاذها ثم تصبح مدفوعة أي تحتاج لترقية الإشتراك والدفع في Pusher.

في حال أردت عدم الإشتراك، فقم بإنشاء تطبيق Next.js بشكل عادي، ثم تنشئ سيرفر Node.js بسيط من خلال Express.js وظيفته فقط استقبال وإرسال التنبيهات.

شكرا على الاجابة ولاكن انا هل يمكنني ان انشء السيرفر داخل مشروع النيكست بدون سيرفر خارجي انا هذه ملفاتي ولاكن لا يعمل 

 

بتاريخ 13 دقائق مضت قال ياسر مسكين:

وعليكم السلام ورحمة الله وبركاته،

أولا ف Vercel لا يدعم WebSockets التقليدية مثل socket.io داخل API Routes بسبب اعتمادها على Serverless Functions التي تكون stateless وتنتهي بعد ثوان معدودة مما يمنع الاتصالات الدائمة المطلوبة ل WebSockets.

أما بالنسبة لنظام تتبع طلبات المطعم على Vercel الأفضل استخدام خدمة خارجية مثل Pusher أو Ably فلها باقة مجانية محدودة ثم مدفوعة حيث يرسل Next.js الأحداث إليها عبر HTTP وتتولى إشعار لوحة التحكم فورا دون سيرفر إضافي.

أو يمكنك إنشاء سيرفر Node.js/Express بسيط منفصل ل WebSockets فقط وانشره على Render أو Railway مع ربط Next.js به عبر عنوان السيرفر، وهذا سيحافظ على ميزات Vercel لل frontend.

هل يمكنك ان تشرح لي الخدمات التي زكرتها

next-env.d.zip

  • 0
نشر

مرحبًا، سؤالك ممتاز لأنه يخص تصميم النظام (Architecture) أكثر من مجرد كود، وهذا تفكير صحيح
سأفترض أنك تقصد دمج واجهة أمامية (لوحة تحكم) مع نظام تتبع الطلبات لحظيًا من الطاولات.

سأجيبك بشكل مرتب:

أولًا: ما التقنيتان اللتان تدمجهما؟

في أنظمة المطاعم غالبًا نتكلم عن دمج:

واجهة مستخدم (Web / Tablet) للطاولات

لوحة تحكم (Dashboard) للإدارة والمطبخ

Backend يدير الطلبات والحالة

وغالبًا يكون الدمج بين:

REST API

Real-time communication (مثل WebSocket)

ثانيًا: هل تحتاج إلى إنشاء Server Express مستقل؟

الجواب المختصر:

نعم، إن كنت تبني نظامًا حقيقيًا وقابلًا للتوسع، فـ Express Server هو الخيار الأنسب.

لماذا؟

لأن Express يسمح لك بـ:

  • إدارة الطلبات (Orders)
  • التحكم بالمستخدمين (طاولة، مطبخ، مدير)
  • ربط قاعدة البيانات
  • إضافة WebSocket بسهولة
  • فصل الواجهة عن المنطق

ثالثًا: هل يمكن بدون Express؟

نعم، لكن ليس الأفضل دائمًا.

أمثلة:

  • Firebase (Firestore + Realtime)
  • Backend مدمج مع Framework آخر (مثل Django)

لكن:

  • التحكم أقل
  • صعوبة تخصيص منطق معقد
  • قد تصبح مكلفة أو مقيدة لاحقًا

رابعًا: المعمارية المثالية لنظام تتبع طلبات مطعم

  • الهيكل المقترح (Best Practice):
  • Frontend (للطاولات)
  • React / Vue
  • كل طاولة تمثل User أو Session
  • ترسل الطلبات للسيرفر
  • Backend (Express)
  • REST API لإنشاء الطلبات
  • WebSocket لتحديث الحالة لحظيًا
  • إدارة الصلاحيات (طاولة / مطبخ / إدارة)
  • Dashboard (لوحة التحكم)
  • React / Next.js
  • تعرض الطلبات لحظيًا
  • تغيير حالة الطلب (قيد التحضير، جاهز، تم التقديم)
  • Real-time Layer
  • Socket.io
  • أو WebSocket عادي

خامسًا: كيف يتم الدمج عمليًا؟

سيناريو بسيط:

  • الطاولة ترسل طلب:
  • POST /api/orders

السيرفر:

  • يخزن الطلب في قاعدة البيانات
  • يرسل إشعار عبر WebSocket

لوحة التحكم:

  • تستقبل الحدث فورًا
  • تُحدّث الواجهة دون إعادة تحميل

المطبخ يغيّر الحالة:

PUT /api/orders/:id/status

الطاولة تستقبل التحديث فورًا

سادسًا: هل هذه الطريقة هي الأمثل؟

نعم، إذا كان هدفك:

  • نظام حقيقي
  • قابل للتوسع
  • قابل لإضافة تطبيق موبايل لاحقًا
  • قابل لاستبدال الواجهة دون المساس بالمنطق
  • فـ Express + REST + WebSocket هي الطريقة الأمثل.

الخلاصة

نعم، إنشاء Express Server مستقل هو الخيار الصحيح

نعم، دمج REST مع Real-time ضروري لنظام المطاعم

لا، الحلول السريعة ليست أفضل على المدى المتوسط

هذه المعمارية مستخدمة فعليًا في أنظمة مطاعم حقيقية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...