PHP جابر:إذا قمت بتسجيل الدخول والتحقق من الرسائل وقطع الاتصال، فمن ناحية المستخدمين الآخرين، سأظهر كأنني غير متصل

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

  •  21-08-2019
  •  | 
  •  

سؤال

لست متأكدًا مما إذا كان ما أفعله صحيحًا تمامًا.ولكن هنا يذهب:

  1. يقوم المستخدم بتسجيل الدخول إلى الدردشة عبر الواجهة المستندة إلى الويب
  2. يتم إبلاغ المستخدم بالتحديثات عبر Comet
  3. يقوم المستخدم بإدخال التفاصيل التي تنتقل إلى ملف PHP الذي يتصل أيضًا بخادم Jabber

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

هل أتعامل مع هذه المشكلة بطريقة خاطئة؟هل يجب علي الاتصال مباشرة بخادم Jabber (عبر جافا سكريبت) بدلاً من طبقة PHP بينهما؟كيفية استقبال الرسائل عبر PHP؟

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

المحلول

هذه مشكلة (أو ميزة) متأصلة في http - لا توجد اتصالات دائمة (ليست حقًا).أنت بحاجة إلى حل بديل، لا يوجد حل حقيقي.

يمكنك القيام بذلك باستخدام Java أو Flash، لكن هذا ليس جيدًا حقًا (javascript 4tw!).

والاحتمال الآخر هو إنشاء عميل وسيط يترجم الاتصالات بين المتصفح وخادم الويب إلى اتصالات بين خادم الويب وخادم جابر. فوضوي، ولكن ممكن.

أو ربما توجد واجهة برمجة التطبيقات (API) التي تساعد في ذلك.

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

نصائح أخرى

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

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

مكتبة XMPP الوحيدة التي استخدمتها على نطاق واسع هي غراب الرأس, ولكن هذا يتطلب استخدام بيثون و كاميليا.

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

أحد الخيارات، وإن كان سخيفًا حقًا، هو:

  • احصل على برنامج نصي php يمكنه التوسط في الاتصال بخادم Jabber للإرسال والاستقبال للمستخدم على صفحتك،

  • استخدم AJAX لإرسال رسائل للمستخدم (سيشير AJAX إلى البرنامج النصي أعلاه، وسيرسل البرنامج النصي الرسالة.)

  • لديك حلقة Javascript لا نهائية تعمل على تنفيذ الأمر ping على نفس البرنامج النصي لمدة 10 ثوانٍ أو نحو ذلك، مع التحقق لمعرفة ما إذا كانت هناك رسائل.إذا كان هناك، فسيتم تمريرها مرة أخرى إلى العميل وإخراجها إلى المستخدم.

هناك مشكلتان فقط مع ما سبق:

1) إذا لم يكن المستخدم متصلاً عند إرسال الرسالة، فهل سيظل برنامج PHP النصي يرى/يحصل على الرسالة؟

2) من المحتمل أن تكون حلقة جانب العميل التي تقدم طلبات اياكس كل 3 ثوانٍ بمثابة استنزاف كبير.

الحل 2:

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

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

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