تطبيق دردشة في الوقت الفعلي تم تصميمه باستخدام Node.js وExpress وMongoose وSocket.io وPassport وRedis.
تحقق من العرض التوضيحي
تأكد من تثبيت Node.js وnpm.
استنساخ أو تنزيل المستودع
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
تثبيت التبعيات
$ npm install
قم بتحرير ملف التكوين في app/config/config.json باستخدام بيانات الاعتماد الخاصة بك (راجع تكوينات الإعداد).
تنزيل وتثبيت ريديس.
تشغيل خادم Redis (كمسؤول)
$ redis-server
ابدأ التطبيق
$ npm start
من المفترض أن يعمل تطبيقك الآن على المضيف المحلي:3000.
تأكد من تثبيت Heroku Toolbelt.
قم بإنشاء تطبيق Heroku جديد، وادفع تطبيق الدردشة الخاص بك إلى مستودع Git البعيد
$ heroku create
$ git push heroku master
أو
الآن، تحتاج إلى إعداد متغيرات التكوين على Heroku.
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(راجع تكوينات الإعداد).الخطوة الأخيرة هي إضافة Redis كوظيفة إضافية على Heroku.
يتعين عليك إعداد حساب فواتير حتى لو كانت الوظيفة الإضافية مجانية.
افتح تطبيق الدردشة الخاص بك في المتصفح
$ heroku open
سيتم تعيين تكوينات الإنتاج من متغيرات البيئة على Heroku، بينما توجد تكوينات التطوير داخل ملف app/config/config.json .
تحتاج إلى إنشاء قاعدة بيانات على MongoLab، ثم إنشاء مستخدم لقاعدة البيانات، والحصول على MongoDB URI
، وتعيينه إلى dbURI
.
تحتاج إلى تسجيل تطبيق جديد على كل من Facebook وTwitter للحصول على الرموز المميزة التي يمكن للمستخدمين من خلالها منح حق الوصول إلى تطبيقك، وتسجيل الدخول باستخدام حساباتهم الاجتماعية.
App ID
الخاص بك، App Secret
. يمكنك الآن تعيين App ID
لـ facebookClientID
App Secret
لـ facebookClientSecret
.
Consumer Key
الخاص بك، Consumer Secret
. يمكنك الآن تعيين Consumer Key
إلى twitterConsumerKey
Consumer Secret
إلى twitterConsumerSecret
.
يمكنه الرجوع إلى المضيف المحلي الخاص بك؛ http://localhost:3000/auth/facebook/callback
عند النشر في Heroku، سيكون لديك شيء يشبه هذا؛ http://my-chat-app.herokuapp.com/auth/facebook/callback
تحتاج الجلسة إلى سلسلة عشوائية للتأكد من أن معرف الجلسة في المتصفح عشوائي. يتم استخدام هذه السلسلة العشوائية لتشفير معرف الجلسة في المتصفح، لماذا؟ لمنع تخمين معرف الجلسة.
يتم استخدام Mongoose للتفاعل مع MongoDB الذي يستضيفه MongoLab.
هناك مخططان؛ المستخدمين والغرف.
كل مستخدم لديه اسم مستخدم وكلمة مرور ومعرف اجتماعي وصورة. إذا تم تسجيل دخول المستخدم عبر اسم المستخدم وكلمة المرور، فيجب أن تكون الهوية الاجتماعية فارغة، وإذا تم تسجيل الدخول عبر حساب اجتماعي، فستكون كلمة المرور فارغة.
كل غرفة لها عنوان، ومجموعة من الاتصالات. يمثل كل عنصر في مصفوفة الاتصالات مستخدمًا متصلاً عبر مقبس فريد؛ كائن مكون من {userId +ocketId} . كلاهما معًا فريد من نوعه.
يغلف كل نموذج كائن Mongoose Model، ويتجاوزه ويوفر بعض الأساليب. هناك نموذجان؛ المستخدم والغرفة.
من الأفضل إدارة الجلسة في تطبيقات Express باستخدام حزمة الجلسة السريعة. يتم تخزين بيانات الجلسة محليًا على جهاز الكمبيوتر الخاص بك، بينما يتم تخزينها في قاعدة البيانات في بيئة الإنتاج. سيتم حذف بيانات الجلسة عند تسجيل الخروج.
يمكن للمستخدم تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور، أو تسجيل الدخول عبر حساب التواصل الاجتماعي. تتم مصادقة المستخدم باستخدام Passport. يحتوي Passport على وثائق شاملة ومفصلة حول كيفية تنفيذ كل طريقة من طرق المصادقة.
وجود اتصال نشط مفتوح بين العميل والخادم حتى يتمكن العميل من إرسال واستقبال البيانات. وهذا يسمح بالاتصال في الوقت الحقيقي باستخدام مآخذ توصيل TCP. وقد أصبح هذا ممكنا بفضل المقبس.io.
يبدأ العميل بالاتصال بالخادم عبر مأخذ توصيل (ربما يتم تعيينه أيضًا لمساحة اسم محددة). بمجرد نجاح الاتصالات، يمكن للعميل والخادم بث الأحداث والاستماع إليها.
هناك نوعان من مساحات الأسماء المستخدمة؛ /rooms
و /chatroom
.
وغني عن القول أنك بحاجة إلى مراقبة طلبك. يستطيع ونستون تسجيل الدخول والتقاط الاستثناءات التي لم يتم اكتشافها. يتم عرض كافة السجلات في وحدة التحكم، ويتم حفظها في ملف debug.log .
في Heroku، يمكنك مراقبة السجلات من خلال النقر على المزيد -> عرض السجلات في الجزء العلوي الأيسر من لوحة تحكم التطبيق الخاص بك.
لقد كتبت هذا السيناريو في وقت فراغي أثناء دراستي. إذا وجدت أنه مفيد، يرجى دعم المشروع من خلال نشر الكلمة.
ساهم بإنشاء أعداد جديدة أو إرسال طلبات السحب على Github أو يمكنك إرسال بريد إلكتروني على: [email protected]
بنيت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.