سؤال

هل هناك طريقة لمسح مسؤولية كائن XHR دون تدمير كائن XHR؟

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

نظرا للطريقة التي يعمل بها تطبيق Server-Side، إذا كنت أستخدم اقتراع قصير على غرار أسلوب AJAX وتدمير كائن XHR عندما انتهيت منه، فقد افتقد كميات كبيرة من البيانات المهمة حتى في الملائكة القليلة التي يتطلبها تحليل استجابة، إنشاء XHR جديد وإرسالها بها. ليس لدي خيار استخدام طلبات متداخلة، لأن خادم الويب يقبل فقط اتصال واحد في كل مرة. (لا تسأل.) لذلك المذنب هو بالضبط النموذج الذي أحتاجه.

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

هل هناك جزء من الصورة التي أفتقدها هنا؟ هل يعرف أحد أي حيل يمكنني استخدامه لتحرير مسؤولية التحرير عندما انتهيت من قراءته؟ أم أن هناك مكان آخر يمكن أن تذهب ردود الخادم؟

أنا غير بما في ذلك التعليمات البرمجية لأن هذا هو حقا سؤال غير مرغوي تقريبا. الروتينات JavaScript التي تفرخ XHRS والتعامل مع البيانات التي تم إرجاعها بسيطة للغاية.

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

المحلول

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

طازجة responseText يعني اتصال جديد. ولكن بعد ذلك لن يكون المذنب؛)

نصائح أخرى

خلافا للاستجابة الأخرى، فإن "الاقتراع الطويل" ليس اتصالا واحدا طويلا. "الاقتراع الطويل" هو العديد من الاتصالات بالتسلسل، وكلها تم إعدادها للبقاء على اتصال لفترة طويلة معقولة من الوقت إذا لم يكن هناك حاجة إلى استجابة. أنهم فعل مهلة (عادة حوالي 25-30s)، ثم أعد إنشاء اتصال جديد. نظرا لأن HTTP1.1 يسمح بإعادة استخدام الاتصالات الموجودة، فلا يجب إعادة التفاوض بشأن الاتصال، وبالتالي يمكن إعادة تأسيسها على الفور تقريبا.

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

عدل] أنا أتحدث من الخبرة، كواحد من مؤلفي Websync..

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