سؤال

سياق:من بلدي JavaScript Web UI، يمكنني تشغيل عملية عملية طويلة (عدة دقائق) التي يتم إجراؤها على .NET2.0 Backend. تتم إرجاع المكالمات على الفور مع معرف التشغيل أثناء تشغيل العملية الطويلة الأمد متوازية. العمليات ليست مكثفة وحدة المعالجة المركزية، ولكن إجراء مكالمات شبكة بطيئة. بمجرد الانتهاء من العملية، أريد أن أرى النتائج في ويب واجهة المستخدم.

سؤال: كيف يمكنني إخطار العميل عند الانتهاء من الوظيفة؟

الخيارات التي نظرت فيها:

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

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

هل كانت مفيدة؟

المحلول

الدفع Websync., ، تنفيذ المذنب ل .NET. يجب أن يكون بالضبط ما تبحث عنه.

نصائح أخرى

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

ربما عكس AJAX مفيد إذا لم يكن لديك الكثير من العملاء المتزامنين. هذا هو في بعض الأحيان يسمى المذنب.

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

http://en.wikipedia.org/wiki/reverse_ajax.

يبدو وكأنه قد يناسب احتياجاتك، لقد استخدمت ذلك جيدا.

ماذا عن وجود iframe المخفية (أو الصغيرة) قم بتشغيل البرنامج النصي طويل الأمد وجعل JavaScript للتحقق من محتوى iFrame فقط؟ على سبيل المثال النصي يكتب معرف iFrame في نهايته.

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

ال Framework ICEVACES يوفر an. ajax دفع تقنية. هم يساندون قابلة للتطوير معالجة غير متزامن في مختلف خوادم التطبيقات مثل Jetty، Tomcat وزنزينكة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top