دفع خادم الرسائل

في أي خدمة إنترنت حديثة ، هناك وظيفتان رئيسيتان فقط:

  • الأول هو إذن المستخدم.
  • والثاني هو الإرسال الفوري لحدث من الخادم إلى العميل.

النقطة الأولى ، كما أعتقد ، لا تحتاج إلى تفسير.

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

لفهم أفضل ، الخدمة ليست كروية معينة في فراغ. يمكن تمثيل الخدمة على النحو التالي:

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

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

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

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

كود البرنامج النصي للخادم مفتوح ومجاني



لقد اخترت node.js socket.io postgreSQL للتنفيذ ، لقد قمت بتنفيذ الإصدار الأول منذ أكثر من عامين ، وكانت الخدمة مرتبطة بشكل وثيق بـ 1c https://infostart.ru/public/545047/ ، ولم يعلنوا بعد عن خادم تفاعل في أي مكان. ولكن منذ وقت طويل ، في الوقت الحالي ، لا يرتبط جزء الخادم بأي حال من الأحوال بالبرنامج المذكور ، يمكن دمج جزء العميل كعملية خارجية أو امتداد.

الاسم الذي تم اختياره مهم - "push0k". الجزء الأول مأخوذ من عبارة "رسالة الدفع" ، والثاني الإنجليزية المعروفة جيداً في شكل مختصر ، لكنه مكتوب من الصفر للأكثر أهمية.

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

لا توجد متطلبات الأجهزة على هذا النحو ، يمكن أن تعمل على المنزل ناس ، حيث يوجد عامل ميناء. عامل الميناء في nas يعني هندسة x86-64 ، ولا يمكن تثبيت postgreSQL في مثل nas بدون عامل ميناء. يعتمد الفهم الدقيق لعدد العملاء الذين يمكن أن يدعمهم هذا الخادم على المهام - منطق الخدمة وحركة المرور المنقولة بين العملاء.

وصف الخادم:


يستخدم الخادم وحدات إضافية:

  • socket.io - الوحدة النمطية يضيف بروتوكول websocket مع طن من تحويلة. الفرص.
  • node-postgres - وحدة للتواصل مع خادم قاعدة بيانات postgreSQL.
  • pm2 هي وحدة نمطية لبدء عدة عمليات خادم مع موازن التحميل.

ملفات الخادم:


  • خدمة starter.js - http (s) ، يمكنك قول لوحة إدارة الخادم. من خلال هذه الخدمة ، يتم تغيير الإعدادات وإطلاق عمليات خادم الويب الرئيسي.
  • push0k.js هو خادم الويب الرئيسي.
  • starter_cfg.js - إعدادات البرنامج النصي الإداري للخادم. اتصال إلى postgreSQL وملفات للاتصال https. قد تختلف ملفات اتصالات https ، وكذلك اسم المجال ، عن الخادم الرئيسي ، لمزيد من الأمان. يتم تغييره يدويا في البداية.
  • config.js - الإعدادات الأساسية للخادم بأكمله.
  • package.js - وحدات إصدار نسخة وصف الملف اللازمة للعمل.
  • push0kStructure.sql - وصف ملف قاعدة بيانات postgreSQL للتهيئة الأولية ، قاعدة بيانات فارغة.

التثبيت:


1. في البداية ، تحتاج إلى تثبيت node.js nodejs.org/en/download

2. يجب أيضًا تثبيت PostgreSQL على كمبيوتر الشبكة المحلية أو نفس postgrespro.ru/products/download

على خادم postgreSQL ، من الضروري تنفيذ ملف "push0kStructure.sql" أو ما يقرب من جميع الاستعلامات من هذا الملف لإنشاء قاعدة بيانات مع الجداول اللازمة.

3. قم بتنزيل ملفات الخادم الخمسة الأولى ، باستثناء push0kStructure.sql ، إلى أي دليل كمبيوتر.

4. في أي محرر نصوص ، قم بتحرير الملف "starter_cfg.js". من المهم تحديد معلمات الاتصال بخادم postgreSQL وتعيين المنفذ للاتصال بالجزء الإداري من خادم push0k.

5. ابدأ تشغيل الجهاز (وحدة التحكم) واستخدم الأمر "cd / path / your / directory /" للانتقال إلى دليل ملف الخادم. يجب أن يكون المسار المحدد في الأمر الطرفي من النقطة 3.

6. قم بتشغيل الأمر في محطة "تثبيت npm" لتثبيت وحدات إضافية.
قم بتشغيل الأمر الموجود في المحطة الطرفية "node starter.js" لبدء تشغيل خدمة الإدارة.

7. قم بتنزيل وتثبيت برنامج المشرف push0k. في "push0k admin" يتم تكوين المعلمات الأساسية لشبكة الويب ، ومنفذ الخادم ، وعدد العمليات وغيرها. يمكنك التحكم في بداية وإيقاف عمليات الخادم ، وإنشاء وإدارة المستخدمين وغرفهم (مجموعات).

تطبيق مسؤول Push0k




يتم تقديم الطلب على الإلكترون باستخدام vue.js. في الداخل ، يتم تطبيق نظام من نوع النافذة ، ويمكن سحب مربعات حوار مشروط صغيرة وإسقاطها مثل النوافذ ، وعناوين النوافذ للإطارات تكون مشابهة لنظام التشغيل Windows 10 ، لنظام التشغيل Mac OS كما في الإصدارات الحديثة ، ولكن حتى الآن دون مراعاة السمة الداكنة. سوف أجمعها لاحقًا لنظام التشغيل linux ، إنها أكثر تعقيدًا مع رؤوس الحوار ، وأعتقد أن الأمر سيكون في أوبونتو ، وإذا لم يكن أوبونتو ، فستفوز بعشرة أنماط. استهلاك الذاكرة في فوز 10 و Mac OS أكثر من 150 ميغا بايت لا يرى.

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



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

كما ذكرنا سابقًا ، يستخدم عنصر التحكم البروتوكولات http و ws (websocket). من الممكن استخدام اتصالات https و wss آمنة. مع الاتصالات الآمنة ، يمكنك رؤية بيانات الشهادات المستخدمة. على غرار المستعرضات ، يتم استخدام رمز "القفل" - الاتصال آمن ، "فتح القفل" - الاتصال غير آمن. وبدون رموز ، على التوالي - لا يتم استخدام اتصال آمن.



المنطق العام


أنا لم أر قط مثل هذا الطلب. خلال عملية التطوير ، استرشدت بحقيقة أنني شخصياً سأهتم بالمراقبة وما هي المعلمات التي يجب رؤيتها في الإحصائيات.

على سبيل المثال ، يوجد في جدول الاتصال لكل اتصال بيانات "وقت الاتصال" ، و "وقت التفويض" ، و "وقت التزامن". أول ما يسمح لك بفهم مدى سرعة تأسيس الاتصال "ws: //" أو "wss: //" المحمي. الثانية - بعد الاتصال ، يتم إرسال رسالة تحتوي على بيانات التفويض بشكل منفصل ، أثناء التفويض ، يتم تنفيذ طلب التحقق من المستخدم وفحص تجزئة كلمة المرور فريد لكل اتصال. الثالث هو وقت تلقي الرسائل الجديدة والبيانات المرجعية الجديدة أو المحدثة. أيضًا ، يتم حفظ إصدارات node.js و socket.io والبيانات الموصوفة الأخرى بشكل عام ، مما يجعل من الممكن فهم كيفية تأثير تحديث node.js أو الوحدة النمطية على السرعة بشكل منفصل ، أو قد يتأثر بعض تحسين الخادم.



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

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

في جدول الاتصال ، يمكنك رؤية الاتصال المغلق مع البيانات "البايت المرسلة" و "البايت المستلمة" و "حجم" بيانات المزامنة أكثر من البايتة المرسلة. عند مزامنة البيانات ، يتم استخدام الضغط التلقائي لـ socket.io ، عند تنزيل المرفقات أو تنزيلها ، يتم تعطيل الضغط التلقائي ، حيث أن الضغط المضغوط بالفعل يؤثر سلبًا على السرعة في كثير من الأحيان.

كما هو مكتوب في بداية المقال ، لم يكن هدفًا هو إنشاء خدمة مشتركة واحدة وتوصيل أكبر عدد ممكن من المستخدمين بها. ولكن كان من المثير للاهتمام دائمًا كم عدد المستخدمين نظريًا ونوع العبء الذي سيتحمله الخادم.

للقيام بذلك ، قمت بإجراء اختبار بسيط: عبر الإنترنت للعملاء من غرفة معينة (مجموعة) ، يتم إرسال رسالة مع معلمات الاختبار (في المعلمات هناك معلمة رئيسية واحدة فقط - عدد الرسائل) ، والتي سيرسلها كل عميل إلى عملاء آخرين عبر الإنترنت. بعد توزيع الاختبار ، يتم حساب الوقت الإجمالي لجميع الرسائل والإشعارات والإدخالات في الجداول postgresql ، وعدد كل الرسائل والإشعارات والإدخالات ، وبالتالي ، يتم حساب السرعة ، بما في ذلك إجمالي جميع العمليات على الخادم.



مثال من لقطة الشاشة:

الأمر الأكثر إثارة للدهشة في بعض الأحيان ، فقط 10000 رسالة و 390،000 لفتة ،
إرسال 50،000 رسالة: عمليات الخادم: 4 مستخدمون: 3
مجموع الرسائل المستلمة 10000 * 3 = 30000
إعادة التوجيه إلى خادم آخر يعالج 30000 * عمليات خادم: 4 - 1 = 90،000
تم إرسالها إلى المستلمين 30000 * المستخدمين: 3 - 1 = 60،000
تتم كتابة الرسائل في الجدول postgreSQL 30 000
تم استلام 90،000 إشعار تسليم
سجلت في جدول postgreSQL إخطارات التسليم 90،000
جميع العمليات 390،000

منطق البيانات في push0k المشرف


مع كل اتصال ، يتم الحصول على جميع البيانات المرجعية: المستخدمون ، الغرف ، الأجهزة ، قواعد البيانات ، بالإضافة إلى آخر 300 إدخال من "المجلة الإحصائية": الاتصالات ، مزامنة البيانات ، إعادة توجيه المرفقات ، الرسائل ، المجلة.

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



يتم تحديث الجداول "المستخدمون" و "الغرف (المجموعات)" و "الاتصالات" و "دفتر اليومية" تلقائيًا. بالنسبة لبقية البيانات ، لا فائدة في التحديث عبر الإنترنت.

يمكن تنزيل تطبيق مسؤول push0k هنا:

ويندوز: push0kadmin الإعداد 19.1.11.exe
نظام التشغيل Mac OS: push0kadmin-19.1.11.dmg

إنه مجاني ، لكن على عكس الخادم ، لا أخطط لفتح شفرة المصدر حتى الآن.

في المقالة التالية ، سوف أصف جزء العميل من عميل push0k desctop ، بالإضافة إلى مثال صغير ورمز وكيفية الاتصال وتسجيل الدخول واستقبال البيانات من الخادم.

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

Source: https://habr.com/ru/post/ar438388/


All Articles