سؤال

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

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

ليس من الصعب تنفيذ سيناريو الدفع ولذلك اعتقدت أنني سأرى ما هو الرأي هنا.

شكرا لمساعدتك.

يحرر:لقد بحثت في AJAX Push بسيط وقمت بتنفيذ عرض توضيحي بسيط بناءً على ذلك شرط بواسطة مايك بورفيس.تحميل العميل منخفض إلى حد ما عند حوالي 5 كيلو بايت للإصدار الأولي ومن المتوقع أن يظل على هذا النحو لبعض الوقت.


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

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

المحلول

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

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

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

نصائح أخرى

أنا مندهش من أن أحداً هنا لم يذكر الاقتراع الطويل.الاستقصاء الطويل يعني الاحتفاظ باتصال مفتوح لفترة أطول (على سبيل المثال 30-60 ثانية)، وبمجرد إغلاقه، قم بإعادة فتحه مرة أخرى، وببساطة جعل المقبس/الاتصال يستمع للاستجابات.وينتج عن ذلك اتصالات أقل (ولكنها أطول)، ويعني أن الاستجابات تكون فورية تقريبًا (قد يضطر البعض إلى انتظار اتصال استقصاء جديد).أود أن أضيف أنه بالاشتراك مع تقنيات مثل NodeJS، يؤدي هذا إلى حل فعال للغاية وقليل الموارد، وهو متصفح متوافق بنسبة 100٪ عبر جميع المتصفحات والإصدارات الرئيسية، ولا يتطلب أي تقنية إضافية مثل Comet أو فلاش.

أدرك أن هذا سؤال قديم، ولكن أعتقد أنه قد يكون من المفيد تقديم هذه المعلومات :)

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

كلاهما لهما متطلبات مختلفة ويعالجان سيناريوهات مختلفة.

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

ولكن، إذا فترة التحديث كبيرة, كما هو الحال في حالتك (5 دقائق)، فالتجمع هو الحل المناسب.سيتطلب الدفع، في هذه الحالة، الكثير من الموارد من كل من العميل والخادم.

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

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

ولست متأكدا إذا كنت قد اتخذت نظرة على بعض تطبيقات COMET هناك (هل هذا ما تقصد ب AJAX دفع).

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

من المستحيل تحديد ما إذا كان الاقتراع سيكون أكثر تكلفة من الدفع دون معرفة عدد العملاء الذين سيكون لديك.أنصح بالتصويت للأسباب التالية:

  • يبدو أنك تريد تحديث البيانات مرة واحدة تقريبًا في الدقيقة.ما لم تكن الإشعارات قادرة على الوصول بمعدل أسرع بكثير من ذلك، فإن الدفع يعني أنك تبقي اتصال HTTP مفتوحًا ولكنك ترى القليل جدًا من النشاط عليه.
  • تم بناء الاستقصاء على أساس اتفاقيات HTTP الموجودة، لذا فإن أي خادم يتحدث إلى متصفحات الويب يكون جاهزًا بالفعل للاستجابة لطلبات Ajax العادية.الحل المعتمد على Comet أو Flash مقبس له متطلبات مختلفة؛سوف تحتاج إلى شيء من هذا القبيل cometd على جانب الخادم ومكتبة من جانب العميل تعمل على الدفع من جانب الخادم.

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

وهناك الآن خدمة http://pusherapp.com التي تحاول حل هذه المشكلة مرة واحدة وإلى الأبد، في لمح البصر. قد يكون من المفيد التدقيق بها. (تنويه: أنا في أي وسيلة المرتبطة بها)

.

ولم أحاول بنفسي، ولكن يقول البعض COMET يعمل وهو أسهل مما كنت اعتقد . هناك أيضا روبي على القضبان في المكونات دعا الطاغوت أن سمعت تحدث عن غاية. مرة أخرى، أنا لم تستخدم، لذلك YMMV، ولكن ما أفهمه هو ان الامر يستغرق أقل بكثير من الموارد مقارنة الاقتراع. أعتقد (يمكن للشخص تأكيد؟) أن المذنب هو كيف MacRumorsLive.com يسلم المدونات الحية من WWDC Stevenotes.

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