نظرة عامة على دعم WebSocket في بوابة التطبيق

توفر بوابة التطبيق للدعم المحلي لـWebSocket من خلال أحجام البوابة جميعها. لا يوجد إعداد يمكن تكوينه من قِبل المستخدم لتمكين دعم WebSocket أو تعطيله تلقائيًا.

بروتوكول WebSocket القياسية في RFC6455 يمكن الاتصال المزدوج الكامل بين الخادم والعميل عبر تشغيل اتصال TCP على مدى طويل. تسمح هذه الميزة باتصال أكثر فاعلية بين خادم الويب والعميل والذي يمكن أن يكون ثنائي الاتجاه دون الحاجة إلى التحقق كما هو مطلوب في التطبيقات المستندة إلى HTTP. يحتوي WebSocket على حمولة منخفضة على خلاف HTTP ويمكنه إعادة استخدام نفس اتصال TCP للعديد من الطلبات/الاستجابات مما يؤدي إلى استخدام الموارد بشكل أكثر كفاءة. صُممت بروتوكولات WebSocket للعمل عبر منافذ HTTP التقليدية من 80 و443.

يمكنك متابعة استخدام وحدة الاستماع HTTP القياسية على المنفذ 80 أو 443 لاستقبال نسبة استخدام شبكة WebSocket. يتم توجيه نسبة استخدام شبكة WebSocket بعد ذلك إلى الخادم الخلفي المتاح WebSocket باستخدام مجموعة الخلفية المناسبة كما هو محدد في قواعد بوابة التطبيق. يجب أن يستجيب الخادم الخلفي إلى بوابة تطبيق التحقيقات الموصوفة فينظرة عامة على التحقيق الصحي المقطع. التحقيقات الصحة لبوابة التطبيق هي HTTP / HTTPS فقط. يجب أن يستجيب كل خادم خلفي إلى تحقيقات HTTP لبوابة التطبيق لمسار نسبة استخدام شبكة WebSocket إلى الخادم.

يُستخدم في التطبيقات التي تستفيد من الاتصال السريع في الوقت الحقيقي، مثل الدردشة ولوحة المعلومات وتطبيقات الألعاب.

طريقة عمل WebSocket

لإنشاء اتصال WebSocket يتم تبادل تأكيد الاتصال المحدد المستند إلى HTTP بين حاسوب العميل والخادم. وفي حالة النجاح، يتم "ترقية" بروتوكول طبقة التطبيق من HTTP إلى WebSockets باستخدام اتصال TCP المؤسس مسبقًا. بمجرد حدوث ذلك، يخرج HTTP تمامًا من الصورة; ويمكن إرسال أو استقبال البيانات باستخدام بروتوكول WebSocket من قِبل كل نقطتي النهاية حتى يتم إغلاق اتصال WebSocket.

Diagram compares a client interacting with a web server, connecting twice to get two replies, with a WebSocket interaction, where a client connects to a server once to get multiple replies.

إشعار

كما هو موضح، يتم استخدام بروتوكول HTTP فقط لإجراء تأكيد اتصال عند إنشاء اتصال WebSocket. بمجرد اكتمال تأكيد الاتصال، يتم فتح اتصال WebSocket لنقل البيانات، ولا يمكن لجدار حماية تطبيق الويب (WAF) تحليل أي محتويات. لذلك، لا يقوم WAF بإجراء أي عمليات فحص على مثل هذه البيانات.

عنصر المستخدم لتكوين وحدة الإنصات

يمكن استخدام وحدة الإنصات HTTP الحالية لدعم نسبة استخدام الشبكة WebSocket. التالي هو قصاصة برمجية من عنصر httpListeners من ملف قالب العينة. ستحتاج إلى مستمعي كل من HTTP وHTTPS لدعم WebSocket وتأمين نسبة استخدام شبكة WebSocket. وبالمثل يمكنك استخدام المدخل أو Azure PowerShell لإنشاء بوابة التطبيق مع المستمعين على المنفذ 80/443 لدعم نسبة استخدام الشبكة WebSocket.

"httpListeners": [
        {
            "name": "appGatewayHttpsListener",
            "properties": {
                "FrontendIPConfiguration": {
                    "Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/DefaultFrontendPublicIP"
                },
                "FrontendPort": {
                    "Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort443'"
                },
                "Protocol": "Https",
                "SslCertificate": {
                    "Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/sslCertificates/appGatewaySslCert1'"
                },
            }
        },
        {
            "name": "appGatewayHttpListener",
            "properties": {
                "FrontendIPConfiguration": {
                    "Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/appGatewayFrontendIP'"
                },
                "FrontendPort": {
                    "Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort80'"
                },
                "Protocol": "Http",
            }
        }
    ],

BackendAddressPool وBackendHttpSetting وتكوين قاعدة التحويل

يتم استخدام BackendAddressPool لتعريف التجمع الخلفي مع خوادم التمكين WebSocket. يتم تعريف backendHttpSetting مع المنفذ الخلفي 80 و443. طلب قيمة الوقت في مجموعة HTTP ينطبق أيضًا على جلسة WebSocket. لا يوجد أي تغيير مطلوب في قاعدة التحويل، والذي يستخدم لربط المستمع المناسب إلى تجمع العناوين الخلفية المطابقة.

"requestRoutingRules": [{
    "name": "<ruleName1>",
    "properties": {
        "RuleType": "Basic",
        "httpListener": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpsListener')]"
        },
        "backendAddressPool": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
        },
        "backendHttpSettings": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
        }
    }

}, {
    "name": "<ruleName2>",
    "properties": {
        "RuleType": "Basic",
        "httpListener": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpListener')]"
        },
        "backendAddressPool": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
        },
        "backendHttpSettings": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
        }

    }
}]

إشعار

تأكد من أن قيمة المهلة أكبر من الفاصل الزمني ping/pong المحدد من قبل الخادم لتجنب مواجهة أخطاء المهلة قبل إرسال اتصال من العميل. القيمة النموذجية ل WebSocket هي 20 ثانية، لذلك، على سبيل المثال، ستضمن قيمة المهلة 40 ثانية أن البوابة لا ترسل خطأ مهلة قبل أن يرسل العميل اتصال اتصال؛ وإلا، فإن هذا سيطرح خطأ 1006 على جانب العميل.

تمكين WebSocket الخلفي

يجب أن يكون لدى الخلفية خادم ويب HTTP/HTTPS يعمل على المنفذ المكون (عادةً 80/443) لكي يعمل WebSocket. يرجع هذا المطلب إلى أن بروتوكول WebSocket يتطلب تأكيد اتصال أولي ليكون HTTP مع الترقية إلى بروتوكول WebSocket كحقل عنوان. فيما يلي مثال على العنوان:

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Origin: https://example.com
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13

سبب آخر لهذا هو أن التحقيق الصحي لبوابة التطبيق الخلفي يدعم بروتوكولات HTTP وHTTPS فقط. إذا لم يستجب خادم الواجهة الخلفية إلى تحقيقات HTTP أو HTTPS، يتم إخراجه من تجمع الخلفية.

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

بعد التعرف على دعم WebSocket، انتقل إلى «إنشاء بوابة تطبيق» لبدء تشغيل الويب المفعل في WebSocket.