بدء استخدام طلبات HTTP لاتصالات الترحيل المختلطة في Node.js

في هذا التشغيل السريع، يمكنك إنشاء Node.js تطبيقات المرسل والمتلقي التي ترسل الرسائل وتستقبلها باستخدام بروتوكول HTTP. تستخدم التطبيقات ميزة الاتصالات المختلطة في Azure Relay. للتعرف على Azure Relay بشكل عام، راجع Azure Relay.

في هذا التشغيل السريع، يمكنك اتخاذ الخطوات التالية:

  1. إنشاء مساحة اسم Relay باستخدام مدخل Microsoft Azure.
  2. إنشاء اتصال مختلط في مساحة الاسم هذه باستخدام مدخل Microsoft Azure.
  3. اكتب تطبيق وحدة تحكم خادم (وحدة استماع) لتلقي الرسائل.
  4. اكتب تطبيق وحدة تحكم العميل (المرسل) لإرسال الرسائل.
  5. تشغيل التطبيقات.

المتطلبات الأساسية

إنشاء مساحة اسم باستخدام مدخل Microsoft Azure

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. حدد كل الخدمات في القائمة اليسرى. حدد Integration، وابحث عن Relays، وحرك الماوس فوق Relays، ثم حدد Create.

    لقطة شاشة تعرض تحديد Relays -> الزر Create.

  3. في صفحة Create namespace ، اتبع الخطوات التالية:

    1. بالنسبة إلى Subscription، اختر اشتراك Azure لإنشاءnamespace.

    2. بالنسبة لـ "مجموعة الموارد"، اختر مجموعة موارد موجودة حيث توجد namespace، أو إنشاء مجموعة موارد جديدة.

    3. أدخل اسما لمساحة اسم الترحيل.

    4. حدد المنطقة التي يجب استضافة مساحة الاسم فيها.

    5. حدد مراجعة + إنشاء عند أسفل الصفحة.

      لقطة شاشة تعرض صفحة إنشاء مساحة الاسم.

    6. في صفحة مراجعة+ إنشاء حدد إنشاء.

    7. بعد بضع دقائق، سترى صفحة Relay لمساحة الاسم.

      لقطة شاشة تعرض الصفحة الرئيسية لمساحة اسم Relay.

الحصول على بيانات اعتماد الإدارة

  1. في صفحة Relay ، حدد Shared access policies في القائمة اليمنى. `

  2. في إطارShared access policies، حدد RootManageSharedAccessKey.

  3. في إطار سياسةSAS: RootManageSharedAccessKey، حدد زر نسخ سلسلة الاتصال الأساسية. يقوم هذا الإجراء بنسخ سلسلة الاتصال إلى الحافظة لاستخدامها لاحقاً. وقم بلصق هذه القيمة في المفكرة أو بعض المواقع المؤقتة الأخرى.

  4. كرر الخطوة السابقة، وهي نسخ قيمة المفتاح الأساسي ولصقها إلى موقع مؤقت للاستخدام لاحقاً.

    لقطة شاشة تعرض معلومات الاتصال لمساحة اسم Relay.

إنشاء اتصال مختلط باستخدام مدخل Microsoft Azure

في صفحة Relay لمساحة الاسم، اتبع هذه الخطوات لإنشاء اتصال مختلط.

  1. في القائمة اليسرى، ضمن Entities، حدد Hybrid Connections، ثم حدد + Hybrid Connection.

    لقطة شاشة تعرض صفحة الاتصالات المختلطة.

  2. في صفحة إنشاء اتصال مختلط، أدخل اسما للاتصال المختلط، وحدد إنشاء.

    لقطة شاشة تعرض صفحة إنشاء اتصال مختلط.

إنشاء تطبيق خادم (وحدة استماع)

للاستماع إلى الرسائل وتلقيها من Relay، اكتب تطبيق وحدة تحكم Node.js.

إنشاء تطبيق Node.js

إنشاء ملف JavaScript جديد يسمى listener.js.

إضافة حزمة الترحيل

قم بتشغيل npm install hyco-https من موجه أوامر Node في مجلد المشروع الخاص بك.

كتابة بعض التعليمات البرمجية لمعالجة الطلبات

  1. أضف الثابت التالي إلى أعلى listener.js الملف.

    const https = require('hyco-https');
    
  2. أضف الثوابت التالية إلى listener.js الملف للحصول على تفاصيل الاتصال المختلط. استبدل العناصر النائبة بين قوسين بالقيم التي حصلت عليها عند إنشاء الاتصال المختلط.

    • const ns - مساحة اسم الترحيل. تأكد من استخدام اسم مساحة الاسم المؤهل بالكامل؛ على سبيل المثال، {namespace}.servicebus.windows.net.
    • const path - اسم الاتصال المختلط.
    • const keyrule - اسم مفتاح نهج الوصول المشترك، وهو RootManageSharedAccessKey بشكل افتراضي.
    • const key - المفتاح الأساسي لمساحة الاسم التي حفظتها سابقا.
  3. أضف التعليمات البرمجية listener.js التالية إلى الملف. :

    لاحظت أن التعليمات البرمجية لا تختلف كثيرا عن أي مثال بسيط لخادم HTTP يمكنك العثور عليه في Node.js البرامج التعليمية للمبتدئين، والتي باستثناء استخدام createRelayedServer بدلا من الدالة النموذجية createServer .

    var uri = https.createRelayListenUri(ns, path);
    var server = https.createRelayedServer(
        {
            server : uri,
            token : () => https.createRelayToken(uri, keyrule, key)
        },
        (req, res) => {
            console.log('request accepted: ' + req.method + ' on ' + req.url);
            res.setHeader('Content-Type', 'text/html');
            res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>');
        });
    
    server.listen( (err) => {
            if (err) {
              return console.log('something bad happened', err)
            }
            console.log(`server is listening on ${port}`)
          });
    
    server.on('error', (err) => {
        console.log('error: ' + err);
    });
    

    إليك الشكل الذي يجب أن يبدو عليه ملف listener.js:

    const https = require('hyco-https');
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    var uri = https.createRelayListenUri(ns, path);
    var server = https.createRelayedServer(
        {
            server : uri,
            token : () => https.createRelayToken(uri, keyrule, key)
        },
        (req, res) => {
            console.log('request accepted: ' + req.method + ' on ' + req.url);
            res.setHeader('Content-Type', 'text/html');
            res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>');
        });
    
    server.listen( (err) => {
            if (err) {
              return console.log('something bad happened', err)
            }
            console.log(`server is listening on ${port}`)
          });
    
    server.on('error', (err) => {
        console.log('error: ' + err);
    });
    

إنشاء تطبيق عميل (مرسل)

لإرسال رسائل إلى Relay، يمكنك استخدام أي عميل HTTP، أو كتابة تطبيق وحدة تحكم Node.js.

إنشاء تطبيق Node.js

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

للبدء، قم بإنشاء ملف JavaScript جديد يسمى sender.js.

إضافة حزمة مدير الحِزَم عقدة الترحيل

قم بتشغيل npm install hyco-https من موجه أوامر Node في مجلد المشروع الخاص بك. تستورد هذه الحزمة أيضا الحزمة العادية https . بالنسبة إلى جانب العميل، الفرق الرئيسي هو أن الحزمة توفر وظائف لإنشاء Relay URIs والرموز المميزة.

كتابة بعض التعليمات البرمجية لإرسال الرسائل

  1. أضف ما يلي constants إلى أعلى sender.js الملف.

    const https = require('hyco-https');
    
  2. أضف الثوابت التالية إلى sender.js الملف للحصول على تفاصيل الاتصال المختلط. استبدل العناصر النائبة بين قوسين بالقيم التي حصلت عليها عند إنشاء الاتصال المختلط.

    • const ns - مساحة اسم الترحيل. تأكد من استخدام اسم مساحة الاسم المؤهل بالكامل؛ على سبيل المثال، {namespace}.servicebus.windows.net.
    • const path - اسم الاتصال المختلط.
    • const keyrule - اسم مفتاح نهج الوصول المشترك، وهو RootManageSharedAccessKey بشكل افتراضي.
    • const key - المفتاح الأساسي لمساحة الاسم التي حفظتها سابقا.
  3. أضف التعليمات البرمجية sender.js التالية إلى الملف. لاحظت أن التعليمات البرمجية لا تختلف بشكل كبير عن الاستخدام المنتظم لعميل HTTPS Node.js؛ فقط يضيف عنوان التخويل.

    https.get({
         hostname : ns,
         path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path,
         port : 443,
         headers : {
             'ServiceBusAuthorization' : 
                 https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key)
         }
    }, (res) => {
         let error;
         if (res.statusCode !== 200) {
             console.error('Request Failed.\n Status Code: ${statusCode}');
             res.resume();
         } 
         else {
             res.setEncoding('utf8');
             res.on('data', (chunk) => {
                 console.log(`BODY: ${chunk}`);
             });
             res.on('end', () => {
                 console.log('No more data in response.');
             });
         };
    }).on('error', (e) => {
         console.error(`Got error: ${e.message}`);
    });
    

    إليك الشكل الذي يجب أن يبدو عليه ملف sender.js:

    const https = require('hyco-https');
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    https.get({
        hostname : ns,
        path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path,
        port : 443,
        headers : {
            'ServiceBusAuthorization' : 
                https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key)
        }
    }, (res) => {
        let error;
        if (res.statusCode !== 200) {
            console.error('Request Failed.\n Status Code: ${statusCode}');
            res.resume();
        } 
        else {
            res.setEncoding('utf8');
            res.on('data', (chunk) => {
                console.log(`BODY: ${chunk}`);
            });
            res.on('end', () => {
                console.log('No more data in response.');
            });
        };
    }).on('error', (e) => {
        console.error(`Got error: ${e.message}`);
    });
    

إشعار

يستخدم نموذج التعليمات البرمجية في هذه المقالة سلسلة الاتصال للمصادقة على مساحة اسم Azure Relay للحفاظ على البرنامج التعليمي بسيطا. نوصي باستخدام مصادقة معرف Microsoft Entra في بيئات الإنتاج، بدلا من استخدام سلسلة الاتصال أو توقيعات الوصول المشترك، والتي يمكن اختراقها بسهولة أكبر. للحصول على معلومات مفصلة ونموذج التعليمات البرمجية لاستخدام مصادقة معرف Microsoft Entra، راجع مصادقة وتخويل تطبيق باستخدام معرف Microsoft Entra للوصول إلى كيانات Azure Relay ومصادقة هوية مدارة باستخدام معرف Microsoft Entra للوصول إلى موارد Azure Relay.

تشغيل التطبيقات

  1. تشغيل تطبيق الخادم: من نوع node listener.jsموجه الأوامر Node.js .
  2. تشغيل تطبيق العميل: من نوع node sender.jsموجه الأوامر Node.js ، وأدخل بعض النص.
  3. تأكد من أن وحدة تحكم تطبيق الخادم إخراج النص الذي تم إدخاله في تطبيق العميل.

تهانينا، لقد أنشأت تطبيق اتصالات مختلطة من طرف إلى طرف باستخدام Node.js!

الخطوات التالية

في هذا التشغيل السريع، قمت بإنشاء Node.js تطبيقات العميل والخادم التي استخدمت HTTP لإرسال الرسائل وتلقيها. تدعم ميزة الاتصالات المختلطة في Azure Relay أيضا استخدام WebSockets لإرسال الرسائل وتلقيها. لمعرفة كيفية استخدام WebSockets مع اتصالات Azure Relay المختلطة، راجع التشغيل السريع ل WebSockets.

في هذا التشغيل السريع، استخدمت Node.js لإنشاء تطبيقات العميل والخادم. لمعرفة كيفية كتابة تطبيقات العميل والخادم باستخدام .NET Framework، راجع التشغيل السريع ل .NET WebSockets أو التشغيل السريع ل .NET HTTP.