47

خادوم دردشة محلية كتبته بـNode.js/Express/Socket.IO/React/Redux/Webpack

forabi

في الفترة الماضية كنت أعمل على تطبيق يجمع ما تعلمته طيلة الشهور الفائتة (React + Redux + Webpack، ثلاث مكونات أخذت تتصاعد شعبيّتها مؤخّرًا)، فقمت بكتابة خادوم وعميل دردشة بشكل مشابه لـWhatsApp Web وبواجهة مصممة وفق Material Design، يعمل ضمن المتصفحات على الشبكة المحلية، حيث يمكن لأي جهاز على الشبكة إنشاء الخادوم ثم يمكن للأجهزة الأخرى الانضمام إليه وبدء الدردشة سويّة عبر WebSockets. يتم اكتشاف الخواديم تلقائيًّا باستخدام بروتوكول Zeroconf/Bonjour، وتستخدم Socket.IO لنقل رسائل الدردشة.

بالإضافة إلى ما سبق، استخدمت:

  • Babel طبعًا

  • Reselect لـRedux

  • Promsie middleware لـRedux

  • CSS Modules

  • ESLint

  • VSCode

فيديو يستعرض المشروع:

الخطوات القادمة:

  • تشفير الرسائل باستخدام asymmetric key encryption باستخدام واجهة التشفير WebCrypto API في المتصفحات الحديثة، يتم تطبيق التشفير بشكل شفاف (transparent) عن طريق middleware لـRedux يشفر الرسائل الصادرة ويفك تشفير الرسائل الواردة ويمررها لـلـstore.

  • تحسين المظهر (المشروع ليس إلا proof of concept)

المصدر متوفر على GitHub:


عمل رائع،

  • هل تخزن الرسائل بمكان ما؟

  • ماذا يحدث عند توقف السوكيت؟ وهل هناك سوكيت لكل محادثة؟

  • ماهو مفهوم الأونلاين الموجود بجانب كل محادثة؟

الرسائل حاليًا تخزن في الذاكرة، وتكرر نسخة منها وتحفظ في IndexedDB باستخدام redux middleware، لكنها لا تعرض مجدّدًا عند تحديث الصفحة، انظر ردي على @assassinateur

أونلاين يعني أن socket متصلة فقط، عند انقطاعها يبث الخادم حدثًا لكل الأطراف المتصلة بأن الطرف الفلاني قد أصبح offline، لتنعكس هذه التغييرات في الواجهة.

socket وحيدة لكل عميل تتولى الدردشة مع كل الأطراف، وsocket أخرى تتولى البحث عن الخواديم المحلية باستخدام bonjour وإيصالها للمتصفح.

أنا أعمل على مشروع مشابه لهذا لكنه موجه ل "أدمن" المواقع. يمكن للزائر مراسلة "الادمن" عبر الشات، الاضافة في مشروعي أن "الادمن" يمكنه الرد و استقبال الرسائل عبر تطبيق الواتساب.

  • أضنه يخزن الرسائل في ملفات متفرقة، لكل محادثة ملفها الخاص.

  • مفهوم الاونلاين أضنه يقصد بها حالة صاحب المحادثة : هل مازال يستقبل الرسائل أم أنه ترك رسالة وغادر.

بالتوفيق

السلام عليكم .

انت تستخدم ال phpApi الخاصة بواتساب ؟ الم تعاني من قصص حجب الرقم ؟

مع التقدير

نعم أستعمل phpApi الخاص بالواتسب لكن مشكلة حجب الرقم لم تحصل معي، على الاقل، لحد الان. لكل أدمن خصصت رقما خاصا به للتواصل لا أشارك نفس الرقم مع كل الادمنات.

اكون سعيد لو شاركتني ال WorkFlow خاصتك .