Nancy: العديد من الطلبات المتزامنة

تم إنشاؤها على ١٦ أبريل ٢٠١٦  ·  9تعليقات  ·  مصدر: NancyFx/Nancy

وصف

لا تستطيع نانسي تقديم العديد من الطلبات المتزامنة (<10) في وقت واحد.

خطوات التكاثر

  1. أضف StaticContentsConventions لخدمة الملفات من دليل.
  2. انسخ ملف فيديو طويل إلى الدليل.
  3. افتح الفيديو في متصفحك في العديد من علامات التبويب (> 10) من خلال توجيه الكل إلى http: //localhost/myvideo.mp4.
  4. لاحظ: لا يتم عرض الفيديو في جميع علامات التبويب ، وبدلاً من ذلك ينتظرون الاتصال حتى تغلق علامات التبويب الأخرى.

    أعدادات النظام

  • نسخة نانسي: 1.4.1
  • مضيف نانسي: OWIN
  • المتصفح: Chrome

التعليق الأكثر فائدة

أفضل خيار لاستخدام nginx للمحتوى الثابت (أو خادم http آخر).

ال 9 كومينتر

هذا صراخ من مشكلة شائعة مع نظام iis الكامل على نظام تشغيل windows غير خادم ، ما هو إصدار windows / iis الذي تعمل فيه (إذا كان موجودًا على الإطلاق)؟

نسيت أن أذكر: أنا أستخدم Selfhosting مع Microsoft.Owin.Host.HttpListener.
ربما هذه هي المشكلة؟
نظام التشغيل هو Windows 10.
ما هو أفضل خيار للاستضافة الذاتية؟

أفضل خيار لاستخدام nginx للمحتوى الثابت (أو خادم http آخر).

أتفق مع @ Kiri-rin nginx مثالي للمحتوى الثابت ومن ثم دع نانسي تتعامل مع الأشياء ذات الصلة بواجهة برمجة التطبيقات.

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

@ cody82 إذا كان لديك مسارات تشغيل طويلة ، فيجب أن تجعلها غير متزامنة حتى لا تحجب سلاسل الطلب

نعم. فهل هذا يعني أن المشكلة ليست في معالجة طلب HTTP العام في نانسي ولكن في معالج الملفات الثابتة التي لا تستخدم غير متزامن بشكل صحيح؟

لقد واجهت أيضًا نفس المشكلة في ServiceStack التي تقوم بمعالجتها بشكل غير متزامن ولكنها تستدعي بعد ذلك وظيفة Socket.Write المتزامنة التي تمنع كل شيء.

لقد تتبعت المشكلة إلى GenericFileResponse.GetFileContent:

c# private static Action<Stream> GetFileContent(string filePath, long length) { return stream => { using (var file = File.OpenRead(filePath)) { file.CopyTo(stream, (int)(length < BufferSize ? length : BufferSize)); } }; }

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

(كما أن هذا الفصل لا يتعامل مع الاستجابات الجزئية ولكن هذه مشكلة أخرى.)

@ cody82 لقد أنشأت PartialFileResponse لتطبيقات دفق الفيديو / الصوت: https://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc

يحتاج إلى القليل من التنظيف ولكن يمكن دمجه في نانسي أو إضافة الوظيفة إلى GenericFileResponse.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات