كيف يمكنني كتابة دردشة في الوقت الفعلي باستخدام Xajax و PHP؟

StackOverflow https://stackoverflow.com/questions/965890

  •  12-09-2019
  •  | 
  •  

سؤال

كيف يمكنني كتابة دردشة في الوقت الفعلي باستخدام Xajax و PHP؟

بمعنى آخر، هل هناك طريقة لإرسال ردود Xajax من الخادم إلى عملاء متعددة؟ أو هو الإمكانية الوحيدة للتحقق من وجود رسائل جديدة كل بضع ثوان على جانب العميل؟

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

المحلول

لا. يجب على العملاء "استطلاع" الخادم المكرر.

أعتقد أن المفتاح هنا هو التفكير في تصميم التفاعل. تتمثل الخدعة في خداع المستخدم في التفكير في أن الدردشة فورية، ولكن عندما تكون في الواقع يتم تحديثها مرة واحدة كل 1 أو 2 أو 3 أو 10 ثوان.

الأفكار:

1) عندما يرسل المستخدم رسالة، إظهاره مباشرة في الدردشة وتشغيل استطلاع للرأي.

2) إذا عاد استطلاع للرأي مع رسائل متعددة من المستخدمين الآخرين، فلا تضيفها جميعا مرة واحدة، فعلا تضيفها على مدى فترة 1-2 ثانية أو نحو ذلك، مع تباعد عشوائي، مما يجعلها تبدو وكأنها قادمون "على الفور" وبشكل مستقل. (إذا كانت مجموعة من الرسائل تأتي في وقت واحد، فإن المستخدم سريع جدا لتحقيق أن الدردشة المحدثة هناك ثم، وليس باستمرار.)

3) إذا كان المستخدم هو الخمول لفترة من الوقت. إسقاط معدل الاستطلاع مرة واحدة كل 10SEC أو نحو ذلك.

4) إذا كان المستخدم نشطا، أي إرسال الكثير من الرسائل، الاستطلاع أكثر في كثير من الأحيان.

5) هل لديك ملف ثابت لكل قناة تكتب فيها الوقت المحادثة آخر تحديث إلى. على سبيل المثال ملف ملف chat-teenfun-lastupdate.txt لديه المحتويات 1224934239 أو أي تنسيق الوقت الذي تفضله. قدم هذا الملف بشكل ثابت والسماح للعملاء باستطلاع هذا الملف من أجل التحقق مما إذا كانت القناة قد تم تحديثها، بدلا من ذلك الاتصال chat-poll.php?ch=teenfun التي تحقق ديناميكي. يتم تقديم الملفات الثابتة حوالي 10-100 مرة بشكل أسرع، اعتمادا على العمل المعني بالبرنامج النصي الديناميكي، وستحتاج إليها عندما تحصل على 250 مستخدم استدعاء.

حظا سعيدا واستمتع بوقتك!

/0

ملاحظة. بدلا من ذلك، يمكنك بالفعل السماح للعملاء بإجراء مكالمة AJAX إلى الخادم واحتفظ بها "شنقا". هذا هو أنك تقبل طلبها والتظاهر بالبدء في إرسال البيانات مرة أخرى، ولكن بعد ذلك توقف فقط. عندما يحدث شيء ما الانتهاء من الاستجابة مع البيانات الاعتمادية. بالنسبة لهذا العمل، أعتقد أنك بحاجة إلى كتابة خادم HTTP الخاص بك على الرغم من ذلك، وهذا يفعل ذلك على وجه التحديد، لأنه لا يمكن أن يكون لديك 250 صفحة PHP شنقا في الذاكرة. ربما يمكن استخدام lighttpd بهذه الطريقة بطريقة أو بأخرى مع وزارة الدفاع لوا ذاكرة التخزين المؤقت. لا أدري، لا أعرف. سيكون مثيرا للاهتمام. الجحيم أنا فلدي جربه في وقت ما :)

نصائح أخرى

بالتأكيد هناك، لكنني لا أعتقد أنه سيكون فعالا للغاية مع العديد من المستخدمين. يمكنك إما أن تقوم بالاستفتاء حيث يستطل كل عميل الخادم لمعرفة ما إذا كان هناك أي رسائل جديدة، أو يمكنك استخدام تقنية المذنب حيث يمكن للخادم دفع رسائل جديدة للعملاء - تحقق من Comet Plugin ل Xajax. وبعد كيف سيتم تنفيذ ذلك باستخدام XAJAX و PHP يتجاوز الأمر، ولكن هنا كيف سأحاول تنفيذها.

دع كل عميل يتصل بالخادم (تسجيل الدخول إلخ)، ثم:

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

باستخدام خادم IM الحقيقي مثل Ejabberd قد يقطع شوطا طويلا، كن أكثر كفاءة والسماح للمستخدمين بالاتصال عبر عملاء سطح المكتب (إذا كان هذا ما تريد). ربما كنت أستخدم ذلك كإخلاف، IOW EJabberd سيكون الخادم وسيكون PHP هو العميل باستخدام XMPP في PHP., ، والعمل كوكيل ل WebGui.

أنظر أيضا:
Google TechTalk على ميزة الدردشة في Gmail (وقضايا قابلية التوسع)

هذا هو 0.02 دولار

طالما هناك عدم وجود تقنية دفع HTTP فلن تحصل على دردشة حقيقية فقط باستخدام JavaScript.

الملاحظة الممكنة:

  • إستخدم Flash فيلم أو أ Java التطبيق الصغير لأداء بعض الاتصالات المقبس
  • احصل على طلبات الاقتراع مرة أخرى على جانب الخادم لبضع ثوان

يمكنك استخدام WebSockets، ولكن كونها ميزة HTML5 جديدة، فهي محدودة كيندا. محظوظ بالنسبة لك هناك Socksjs., ، والتي تنفذ WebSockets على المتصفحات التي لا تتعامل معها.

على جانب الاستضافة، يجب أن تكون قادرا على استخدام أي خادم Websockets، فهناك عدد قليل من PHP.

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

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

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

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

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

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