Advertisement
  1. Code
  2. Ruby

كيفية استخدام فاي كخادم دفع في الوقت الحقيقي في القضبان

by
Read Time:12 minsLanguages:

Arabic (العربية/عربي) translation by Saadkhaled (you can also view the original English article)

هناك طرق متعددة لإضافة وظائف الدفع إلى تطبيق ، بما في ذلك Pushr و Pub- Nub ، وهي حلول أنيقة وبسيطة تمامًا.  g في هذه المقالة ، سأوضحلك كيفية استخدام فاي ، وهو نظام الرسائل الذي يعمل على كل من روبي و Node.js. 


الخطوة 1 - احصل على كل شيء جاهز 

سنبني خدمة دردشة بسيطة.  الآن ، غطى رايان بيتس هذا علىRailscast # 260 ، ومع ذلك ، سنتخذ نهجا مختلفا قليلا في هذا البرنامج التعليمي.   أولاً ، سننشئ خدمة دردشة حيث يدخل المستخدمون إلى غرفة عامة ، ويمكن للجميع الدردشة مع بعضهم البعض بشكل عام.   الوظيفة الثانية التي سنضيفها هي الرسائل الخاصة.  g

تأكد من أن لديك إعداد عمل لروبي ، وروبي على القضبان 3.1.  وبصرف النظر عن ذلك ، ستحتاج رقيقة.   Thin هو خادم ويب روبي يستخدم على نطاق واسع ، ويتطلب فاي تشغيله (لا يعمل مع خادم WEBrick ، ​​Rails المدمج).   يمكنك تثبيت Thin ، مثل: 

يجب أن نكون جميعًا مضبوطين ، لذلك دعنا ننشئ التطبيق: 

الآن ، أضف جوهرة faye إلى Gemfile : 

وقم بتشغيل حزمة لتثبيت البرنامج.  يحتاج فاي للعمل على خادم ويب منفصل عن تطبيق الويب نفسه ؛ لإنجاز هذا ، تحتاج إلى إنشاء ملف التكوين Rackup.  أضف ملف faye.ru إلى جذر المشروع وتأكد من أن الأمر يبدو كما يلي: 

هذا الملف يقول ببساطة Rackup كيفية بدء تشغيل خادم فاي.   جربه للتأكد من أنه يعمل بشكل صحيح.   قم بتشغيل هذا في الصالة الخاصة بك: 

إذا كنت لا تتلقى أي أخطاء ، فأنت على ما يرام! 


الخطوة 2 - بعض المصادقة الأساسية 

لإنشاء تطبيق دردشة ، نحتاج إلى أمرين أساسيين: المستخدمين وغرفة الدردشة.   لن نتمكن من مصادقة مستخدمينا ، ولكن لا نزال بحاجة إلى تزويدهم بطريقة لتعيين اسم المستخدم الخاص بهم.   دعونا نخلق ذلك.  قم بتشغيل الأمر التالي لإنشاء وحدة تحكم في الجلسات حتى نتمكن من تسجيلهم في: 

هذا سيخلق جلسات تحكم وطريقتين: جديدة و خلق .  أضف هذه المسارات إلى ملف route.rb الخاص بك : 

يجب أن يكون هذان المساران واضحين لك.  المضي قدما وتعديل ملف التطبيق / وجهات النظر / جلسات / new.html.erb : 

ولديك طريقة إنشاء داخل وحدة تحكم جلسات العمل تبدو كالتالي: 

المضي قدما جربه!  قم بتشغيل خادم rails في المحطة الطرفية وأشر متصفحك إلى localhost: 3000 / login وأدخل اسم مستخدم.  يجب أن يتم الترحيب بك من خلال طلبك بعد إرسال النموذج. 

إذا كنت مستعدًا للتحدي ، فيمكنك استخدام Omniauth لإضافة بعض التكامل مع Twitter أو Facebook لهذه الخطوة! 


الخطوة 3 - غرفة الدردشة 

الآن لدينا بعض المصادقة الأساسية ، دعنا نضيف غرفة محادثة.  قم بتشغيل الأمر التالي لإنشاء وحدة تحكم للدردشة : 

سيؤدي ذلك إلى إنشاء وحدة تحكم الدردشات وطريقة الغرفة الواحدة .  نحتاج إلى إضافة بعض المسارات لجعل عمل الدردشة الخاص بنا ، لذا أضف هذا السطر إلى ملف route.rb الخاص بك : 

سيقوم هذا المسار بتوجيه المستخدم إلى غرفة المحادثة ، والسماح لهم بنشر الرسائل من خلال نموذج بسيط.  تعديل طريقة الغرفة على وحدة تحكمالدردشات وجعلها تبدو كما يلي: 

سيضمن ذلك قيام المستخدمين بتعيين اسم مستخدم إذا كانوا يريدون الدردشة.   الآن ، دعونا نخلق الغرفة نفسها!  أضف هذا إلى التطبيق / المشاهدات / الدردشات / room.html.erb : 

هذا هو بعض الهيكل البسيط للغرفة.   سيتم إدارة النموذج في النهاية من خلال بعض شفرة جافا سكريبت التي ستنشر الرسالة إلى غرفة الدردشة. 

الآن ، لنشر رسائل إلى الغرفة ، نحتاج إلى إضافة بعض JavaScript إلى طريقة العرض الخاصة بنا.  أولاً ، أضف مكتبة فاي إلى التطبيق / المشاهدات / تخطيطات / application.html.erb : 

ثم أضف ما يلي إلى بداية عرض room.html.erb : 

تأخذ هذه الطريقة الرسالة في النموذج الذي أضفناه سابقًا (عند إرساله) ، وترسل اسم المستخدم والرسالة الخاص بالمؤلف إلى القناة "/ messages / public" في كائن JSON.   القنوات هي طريقة فاي لإرسال الرسائل.   يشترك مستخدم في قناة ويتلقى جميع الرسائل التي يتم إرسالها إليه.   في حالتنا ، هناك قناة واحدة فقط ، وهي القناة العامة.   لنقوم بتشريح الشفرة أكثر قليلاً: 

  1. أولاً ، نقوم بإنشاء عميل فاي جديد ، ونقوم بالاتصال بخادم فاي الخاص بنا. 
  2. بعد ذلك ، نتولى تقديم النموذج.   عندما يقوم المستخدم بضرب مفتاح الإدخال أو النقر فوق "إرسال" ، سننشر كائن JSON المذكور آنفاً والذي يحتوي على مرسل الرسالة والرسالة نفسها على القناة العامة. 
  3. بعد ذلك ، نمسح مربع الرسالة ونرجع كاذبة ، لتجنب أن يتم إرسال النموذج فعليًا وتحديث الصفحة. 

الآن ، سيؤدي ذلك إلى نشر رسائل إلى غرفة الدردشة ، ولكن لن يتمكن المستخدمون المتصلون لدينا من استقبالها ، لأن المتصفحات ليست مشتركة في القناة.   يتم تحقيق ذلك من خلال المزيد من JavaScript.  جعل كتلة جافا سكريبت على التطبيق / وجهات النظر / الدردشات / room.html.erb تبدو كما يلي: 

هذا ببساطة يتصل بخادم فاي ، ويشترك في قناة "/ الرسائل / العامة".   يتلقى رد الاتصال الذي نقدمه الرسائل المرسلة.  ستكون البيانات كائن JSON الذي نشرناه من قبل ، لذلك نحن ببساطة نستخدم ذلك لإنشاء 

مع الرسالة داخلها ، وألحقها بحاوية غرفة الدردشة. 

يجب أن يكون لديك الآن دردشة بسيطة!   قم بتشغيل كل من خادم Faye و Rails ، وافتح متصفحين (أو نافذة التصفح المتخفي على Chrome على سبيل المثال).   يمكنك إدخال اسمين مستخدمين مختلفين واختبار الدردشة.   يجب أن تظهر الرسائل على الفور تقريبًا في غرفة الدردشة بمجرد إرسالها. 


الخطوة 4 - إضافة رسائل خاصة 

في الوقت الحالي ، يمكن للمستخدمين الدردشة مع بعضهم البعض ، ولكن جميع الرسائل عامة.   دعونا نضيف بعض الوظائف البسيطة حيث يمكن للأشخاص إرسال رسائل خاصة إلى شخص ما ، وذلك من خلال ذكر اسم المستخدم الخاص بالمستلم - نوع يشبه في تويتر.   ولكي نتمكن من العمل ، سنقوم باشتراك مستخدمينا لقنواتهم الخاصة ، لذا فهم هم الوحيدون القادرون على تلقي رسائل منه.  اجعل تطبيقك / المشاهدات / دردشات / room.html.erb جافا سكريبت تبدو كما يلي: 

كما ترون ، نحن نشترك في قناتين فاي: الأولى هي القناة العامة ، والثانية هي قناة ، تسمى "/ messages / private / USERNAME" (لاحظ أننا نستخدم اسم المستخدم في جلسة القضبان).   بهذه الطريقة ، عندما يذكر شخص ما ذلك المستخدم ، بدلاً من إرسال الرسالة عبر القناة العامة ، نرسلها عبر قناة المستلم الخاصة ، لذلك يمكن لهذا الشخص فقط قراءتها.   نضيف أيضًا بعض الأنماط البسيطة إليها ، لذا فهي تظهر بالخط العريض. 

الشيء الآخر الذي تغير هو الرمز الذي ينشر الرسائل.  نتحقق أولاً مما إذا كانت الرسالة خاصة ، من خلال تطبيق تعبير عادي بسيط يبحث عن ذكر.   إذا كان الأمر كذلك ، فننشر رسالة إلى القناة الخاصة بالمستلم.   إذا لم يكن الأمر كذلك ، فنحن نفعل بالضبط كما فعلنا من قبل - نشرها على القناة العامة. 

الآن جربه!   أرسل رسائل إلى مستخدمين آخرين من خلال ذكرهم ، يجب أن تراهم فقط في نافذة الدردشة الخاصة بالمستلم. 


الخطوة 5 - بعض التحذيرات 

هذا التنفيذ له عيوبه.   أولاً ، لا نتحقق مما إذا كان اسم المستخدم الذي يختاره مستخدمًا بالفعل.   وهذا يعني أنه يمكن لأي شخص إدخال نفس اسم المستخدم مثل شخص آخر وإرسال رسائل متظاهرًا بأنها تتلقاه ، بل وحتى استلام رسائله الخاصة!   يمكن حل هذه المشكلة بسهولة عن طريق إضافة نوع من نظام التوثيق أو عن طريق تخزين أسماء المستخدمين ، التي يتم استخدامها حاليًا ، داخل قاعدة بيانات.   لن أغطي هذا في البرنامج التعليمي اليوم ، ولكن يجب أن يكون من السهل عليك التنفيذ.  إذا كنت بحاجة إلى مساعدة ، فاترك تعليقًا وسنساعدك! 

التوضيح الثاني ليس واضحًا.   تكمن المشكلة في تطبيقنا في أن أي شخص يمكنه التعامل مع جافا سكريبت على الطاير (باستخدام Firebug على سبيل المثال) للاشتراك في أي قناة يرغبون فيها (حتى القنوات الخاصة) ، ويمكنهم نشر رسائل لهم يتظاهرون بأنهم شخص آخر.   لم يتم حل هذه المشكلة بسهولة كالعيب الأول الذي أشرت إليه (إذا كنا سنحل هذه المشكلة يدويًا) ، ولكن رايان بيتس أنشأ جوهرة تجعل هذه المهمة بمثابة حزام الأمان ، كما أن تطبيقنا آمن جدًا. 

تسمى الأحجار الكريمة private_pub؛ تمنع أي مستخدم من النشر إلى القنوات باستخدام جافا سكريبت ، وهذا يعني أن تطبيق Rails فقط هو القادر على النشر إليهم.   هذا يضيف بعض الأمان نظرًا لأن مستخدمًا ضارًا لن يتمكن من النشر إلى القنوات الخاصة.   شيء آخر أن هذه الجوهرة يحل هو الاشتراكات.   باستخدام private_pub ، لا يمكن للمستخدم سوى تلقي الرسائل من القنوات التي نشترك فيها ، لذلك فهو غير قادر على إضافة اشتراك يدويًا ، وحل المشكلة بالكامل. 

لذا دعنا نضيفها إلى Gemfile : 

قم بتشغيل تثبيت الحزمة لتثبيت الأحجار الكريمة وتشغيل المولد لإنشاء ملفات التكوين: 

ستتلقى تحذير تعارض عند تشغيل هذا الأمر (يحاول private_pub الكتابة فوق ملفfaye.ru ).   ما عليك سوى كتابة "Y" والضغط على Enter ، لأنه من الضروري استبدال هذا الملف.  ستحتاج أيضًا إلى نقل الملفpublic / private_pub.js إلى المجلد app / assets / javascripts .  وآخر شيء: إزالة الخط الذي يتضمنfaye.js على application.html.erb ، نظرًا لأن Private Pub يتضمنه تلقائيًا.   تأكد من إعادة تشغيل كلا الخوادم (القضبان و faye) في هذه المرحلة. 

الآن ، نحن بحاجة إلى إجراء بعض التغييرات.   أولاً ، يتم الاشتراك في مستخدم إلى قناة بشكل مختلف باستخدام private_pub.  تعديل التطبيق / طرق العرض / الدردشات / room.html.erb وإضافة ما يلي قبل حظر جافا سكريبت: 

هذه طريقة private_pub للاشتراك في القنوات.   هذا يفوض المستخدم لتلقي الرسائل من خلال القناة التي تحددها.   الآن ، نحن بحاجة إلى تغيير شفرة جافا سكريبت إلى ما يلي: 

PrivatePub.subscribe ("/ messages / public"، function (data) { 
$ ('<p> </ p>'). html (data.username + ":" + data.msg) .appendTo ('# chat_room')؛ 
}); 

PrivatePub.subscribe ("/ messages / private / <٪ = session [: username]٪>"، function (data) { 
$ ('<p> </ p>'). addClass ('private'). html (data.username + ":" + data.msg) .appendTo ('# chat_room')؛ 
 }); 

والفرق الوحيد هنا هو أننا نستخدم PrivatePub للاشتراك في القنوات بدلاً من مكتبة فاي مباشرة. 

سنحتاج أيضًا إلى تغيير طريقة نشرنا للرسائل.  مع Private Pub ، يستطيع تطبيق Rails فقط نشر الرسائل.   لا يمكن لمكتبة Javascript نشر الرسائل من تلقاء نفسها.   هذا أمر جيد ، لأننا نتحكم بشكل كامل بمن ينشر الرسائل وأي قناة.   من أجل القيام بذلك ، سنحتاج إلى تغيير النموذج المستخدم لإرسال الرسائل إلى ما يلي: 

هذا نموذج AJAX ، لذا لن يتم تحديث الصفحة عند إرسالها.  وسيبحث أيضًا عن new_message_path ، لذا تأكد من إضافة هذا إلى ways.rb : 

ستحتاج أيضًا إلى إنشاء طريقة جديدة في وحدة تحكم الدردشات: 

هذا يعمل إلى حد كبير مثل نظيره جافا سكريبت.   وهي تحدد ما إذا كانت الرسالة تحتوي على ذكر ، وإذا كانت كذلك ، فإنها ترسل الرسالة إلى قناة المستلم الخاصة.   إذا لم يكن كذلك ، فإنه يرسل الرسالة عبر القناة العامة.   الآن ، هذا ليس في الواقع إرسال الرسالة ، فإنه يخلق فقط متغيرين نحتاج إلى استخدامه من داخل العرض من أجل إرسال واحد.  لا تسمح لك Pub الخاصة بإرسال رسائل عبر وحدة التحكم (على الأقل ليس باستخدام الإصدار الذي استخدمته لهذا البرنامج التعليمي) ، لذا عليك المضي قدمًا وإنشاء تطبيق الملف / طرق العرض / الدردشات / new_message.js.erb وإضافة ما يلي:

سيؤدي هذا إلى تنفيذ السطر الأول من التعليمات البرمجية ، ومسح مربع الرسالة ، وعن طريق الاتصال بـ publish_to ، سترسل الحانة الخاصة @ رسالة (سيتم تحويلها إلى كائن JSON عند وصولها) إلى channel .   بسيطة ، هاه؟ 

المضي قدما في محاولة بها.   يجب أن يعمل مثلما كان من قبل ، فقط مع الأمان الجديد! 


استنتاج 

آمل أن تكون هذه المقالة قد أعطيتك فكرة عن كيفية استخدام فاي لمشاريعك .   أنصحك بأن تستخدم دائمًا Pub الخاصة ، نظرًا لأنها تضيف مستوىً هامًا من الأمان ، إلا إذا كنت لا تحتاج إليها حقًا. 

 إذا كان لديك أي أسئلة ، فلا تتردد في طرحها في التعليقات أو إرسال تغريدة لي !

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.