جلسات Remote Rendering

في Azure Remote Rendering (ARR)، تعد الجلسة مفهوما رئيسيا. توضح هذه المقالة ماهية جلسة العمل بالضبط.

نظرة عامة

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

وهذا يعني أنه عند استخدام Azure Remote Rendering، يجب حجز خادم سحابي مزود بقدرات الأجهزة الضرورية حصريا لمعالجة طلبات العرض الخاصة بك. تشير جلسة العمل إلى كل ما يتعلق بالتفاعل مع هذا الخادم. يبدأ بالطلب الأولي لحجز (تأجير) جهاز لاستخدامك، ويستمر مع جميع الأوامر لتحميل النماذج ومعالجتها، وينتهي بطرح عقد الإيجار على خادم السحابة.

إدارة الجلسات

هناك طرق متعددة لإدارة الجلسات والتفاعل معها. الطريقة المستقلة عن اللغة لإنشاء الجلسات وتحديثها وإيقاف تشغيلها هي من خلال واجهة برمجة تطبيقات REST لإدارة الجلسة. في C# وC++، يتم عرض هذه العمليات من خلال الفئات RemoteRenderingClient و RenderingSession. بالنسبة لتطبيقات Unity، هناك المزيد من وظائف الأداة المساعدة التي يوفرها ARRServiceUnity المكون.

بمجرد الاتصال بجلسة عمل نشطة، يتم عرض عمليات مثل تحميل النماذج والتفاعل مع المشهد من خلال RenderingSession الفئة .

إدارة جلسات متعددة في وقت واحد

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

مراحل الجلسة

تخضع كل جلسة إلى مراحل متعددة.

بدء الجلسة

عندما تطلب من ARR إنشاء جلسة عمل جديدة، فإن أول شيء يقوم به هو إرجاع UUID لجلسة عمل. يسمح لك UUID هذا بالاستعلام عن معلومات حول الجلسة. يستمر UUID وبعض المعلومات الأساسية حول جلسة العمل لمدة 30 يوما، بحيث يمكنك الاستعلام عن هذه المعلومات حتى بعد إيقاف جلسة العمل. عند هذه النقطة، سيتم الإبلاغ عن حالة جلسة العمل كبدء.

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

هام

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

عندما تعثر الخدمة على خادم مناسب، يجب عليها نسخ الجهاز الظاهري المناسب (VM) إليه لتحويله إلى مضيف Azure Remote Rendering. وتستغرق هذه العملية عدة دقائق. بعد ذلك يتم تشغيل الجهاز الظاهري وتنتقل حالة جلسة العمل إلى Ready.

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

الاتصال إلى جلسة عمل

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

هام

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

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

هام

لا يغير الخادم البعيد حالة البيانات من جانب العميل أبدا. يجب تنفيذ جميع طفرات البيانات (مثل تحديثات التحويل وطلبات التحميل) بواسطة تطبيق العميل. تحدث جميع الإجراءات حالة العميل على الفور.

إنهاء الجلسة

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

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

قد يتم أيضا إيقاف جلسة العمل بسبب بعض الفشل.

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

التحذير

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

تمديد وقت تأجير جلسة العمل

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

مثال على التعليمات البرمجية

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

RemoteRenderingInitialization init = new RemoteRenderingInitialization();
// fill out RemoteRenderingInitialization parameters...

RemoteManagerStatic.StartupRemoteRendering(init);

SessionConfiguration sessionConfig = new SessionConfiguration();
// fill out sessionConfig details...

RemoteRenderingClient client = new RemoteRenderingClient(sessionConfig);

RenderingSessionCreationOptions rendererOptions = new RenderingSessionCreationOptions();
// fill out rendererOptions...

CreateRenderingSessionResult result = await client.CreateNewRenderingSessionAsync(rendererOptions);

RenderingSession session = result.Session;
RenderingSessionProperties sessionProperties;
while (true)
{
    var propertiesResult = await session.GetPropertiesAsync();
    sessionProperties = propertiesResult.SessionProperties;
    if (sessionProperties.Status != RenderingSessionStatus.Starting &&
        sessionProperties.Status != RenderingSessionStatus.Unknown)
    {
        break;
    }
    // REST calls must not be issued too frequently, otherwise the server returns failure code 429 ("too many requests"). So we insert the recommended delay of 10s
    await Task.Delay(TimeSpan.FromSeconds(10));
}

if (sessionProperties.Status != RenderingSessionStatus.Ready)
{
    // Do some error handling and either terminate or retry.
}

// Connect to server
ConnectionStatus connectStatus = await session.ConnectAsync(new RendererInitOptions());

// Connected!

while (...)
{
    // per frame update

    session.Connection.Update();
}

// Disconnect
session.Disconnect();

// stop the session
await session.StopAsync();

// shut down the remote rendering SDK
RemoteManagerStatic.ShutdownRemoteRendering();

يمكن الحفاظ على مثيلات متعددة RemoteRenderingClient ومثيلات RenderingSession ومعالجتها والاستفسار منها من التعليمات البرمجية. ولكن قد يتصل RenderingSession جهاز واحد فقط ب في كل مرة.

عمر الجهاز الظاهري غير مرتبط بالمثيل RemoteRenderingClient أو المثيل RenderingSession . RenderingSession.StopAsync يجب استدعاء لإيقاف جلسة عمل.

يمكن الاستعلام عن معرف الجلسة المستمر عبر RenderingSession.SessionUuid() وتخزينه مؤقتا محليا. باستخدام هذا المعرف، يمكن للتطبيق استدعاء RemoteRenderingClient.OpenRenderingSessionAsync للالتزام بتلك الجلسة.

عندما RenderingSession.IsConnected يكون صحيحا، RenderingSession.Connection ترجع مثيلا ل RenderingConnection، والذي يحتوي على وظائف لتحميل النماذج ومعالجة الكيانات والاستعلام عن معلومات حول المشهد المعروض.

مستندات API

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