سؤال

العديد من الزوار يتصلون http://site.com/chat.php.

يمكنهم كل منها كتابة وإرسال رسالة نصية إلى Chat.php وتعرضها على الفور على متصفح الجميع (http://site.com/chat.php.)

هل يجب علي استخدام قاعدة بيانات؟ أعني، هل Ajax أو قدرات المخزن المؤقت PHP كافية لمثل هذه غرفة الدردشة على جلسات؟

كيف يمكن لجلسات المستخدمين المختلفين مشاركة البيانات من بعضها البعض؟

أي فكرة أو رؤى ستكون موضع تقدير، شكرا!

تحرير: شكرا على الروابط. ولكن ما أريده هو الطريق لدفع البيانات إلى مستعرض عميل. يتم تحديث متصفح العميل المنعش باستمرار (AJAX أم لا) الطريقة الوحيدة؟ أيضا التحدي هنا هو كيف المستخدمين المختلفين، على سبيل المثال، 2، 1 في 1، مشاركة نصوص الدردشة؟ كيف يمكن تخزينها؟ وكيف يمكنك مزامنة النصوص بين العملاء 2؟ عدم استخدام قاعدة بيانات ويفضل.

تحرير 2: في الواقع yshout. ذكرها بيتر د هل هذه المهمة جيدا. لا يبدو أنه يحتفظ بتحديث المتصفح. لكنني لا أفهم كيف يدفع رسائل جديدة إلى نافذة المستخدم الموجودة.

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

المحلول

هناك (تقريبا) 3 خيارات لإنشاء تطبيق الدردشة:

مآخذ

استخدم Flash / Java ومقطوعات للأمطوانية واللغة البرمجة القادرة على المقبس للخلفية. بالنسبة إلى الواجهة الخلفية، أوصي Java أو Python، لأنها متعددة المدة و Nio-Capable. من الممكن القيام بذلك مع PHP (لكن PHP لا يمكن أن تفعل ذلك فعالا فعالا وليس مناسبا حقا لهذا الغرض). هذا خيار إذا كنت بحاجة إلى أداء عالي، وربما لا ما تبحث عنه.

استخدم Ajax وسحب

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

استخدم Ajax والدفع

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

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

إذا كنت ترغب فقط في تعلم ذلك، فابدأ من تطبيق AJAX / STUP بسيط، ثم حاول برنامج برنامج باستخدام AJAX والدفع.

ونعم، على الأرجح ستحتاج إلى قاعدة بيانات، صعبة، لقد نجحت بنجاح بحل AJAX / سحب بسيط للغاية يعمل مع ملفات نصية للمتعة (لكنني بالتأكيد لن أستخدمها في الإنتاج!).

إنه (على حد علمي، لكنني متأكد من أنني غير ممكن إنشاء تطبيق دردشة دون الخلفية جانب الخادم (مع JavaScript الواجهة الأمامية وحدها)!

تحديث

إذا كنت ترغب في معرفة كيفية إجراء دفع البيانات، فابحث في المصدر هنا: http://wehrlos.straain.at/httpreq/client.html.. وبعد Async Multipart هو ما تريد :)

function asSendSyncMulti() {
    var httpReq = new XMLHttpRequest();

    showMessage( 'Sending Sync Multipart ' + (++this.reqCount)  );

    // Sync - wait until data arrives
    httpReq.multipart   = true;     
    httpReq.open( 'GET', 'server.php?multipart=true&c=' + (this.reqCount), false );
    httpReq.onload = showReq;
    httpReq.send( null );
}

function showReq( event ) {
    if ( event.target.readyState == 4 ) {
        showMessage( 'Data arrives: ' + event.target.responseText );
    }
    else {
        alert( 'an error occured: ' + event.target.readyState );
    }

}

يسمى Showreq كل مرة تصل البيانات، وليس مرة واحدة فقط في طلبات AJAX العادية (أنا لا أستخدم jquery أو النموذج الأولي هنا، وبالتالي فإن الرمز يعين قليلا - هذا قديم حقا :)).

إليك الجزء جانب الخادم:

<?php

    $c = $_GET[ 'c' ];

    header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');

    sleep( 1 );

    print "--rn9012\n";
    print "Content-type: application/xml\n\n";
    print "\n";
    print "Multipart: First Part of Request " . $c . "\n";
    print "--rn9012\n";
    flush();

    sleep( 3 );

    print "Content-type: application/xml\n\n";
    print "\n";
    print "Multipart: Second Part of Request " . $c . "\n";
    print "--rn9012--\n";

?>

تحديث 2.

فيما يتعلق بقاعدة البيانات: إذا كنت قد حصلت على بنية مشتركة لا شيء مثل mod_php / cgi في الخلفية Defactley. يحتاج بعض نوع من التخزين الخارجي مثل قواعد البيانات أو TextFiles. ولكن: يمكنك الاعتماد على الذاكرة عن طريق كتابة خادم HTTP الخاص بك (ممكن مع PHP، لكنني لا أوصي به للعمل الجاد). هذا ليس معقدا حقا، ولكن ربما قليلا من نطاق سؤالك ^^

تحديث 3.

لقد ارتكبت خطأ! حصلت على كل شيء مختلط، لأنه كان الوقت الطويل في الواقع فعلت شيئا من هذا القبيل. فيما يلي التصحيحات:

  1. ردود متعددة الاستخدامات تعمل فقط مع متصفحات Mozilla وبالتالي من الاستخدام المحدود. المذنب لا يعني استجابة متعددة الأجزاء.

  2. Comet يعني: استجابة التقليدية الواحدة، ولكنها عقدت (مع حلقة لا حصر لها والنوم) حتى هناك بيانات متاحة. لذلك يحتوي المتصفح على طلب / استجابة لكل إجراء (في أسوأ الحالات)، وليس طلب واحد كل 8 ثوان، حتى لو لم يحدث أي شيء يستحق الرد.

نصائح أخرى

تذكر أنك تريد أن تعمل هذا دون DB، وبدون تشغيل العميل (العملاء) للعميل (S)

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

ستحتاج إلى إرسال بعض "لا op."البيانات للحفاظ على اتصال الذهاب عندما لا تكون هناك رسائل ولكن من الناحية النظرية ستعمل ذلك.

المشكلة هي، لإنجاز ما سبق لا يزال الكثير من العمل. ستحتاج إلى القيام بعمل AJAX عودة إلى الخادم لتقديم تعليقات جديدة ... سيكون متصفح المستخدمون هو الدور الذي يعمل فيه طوال الوقت (إلا إذا كنت قد عشت سجل الدردشة في iFrame - مثل المزيد من العمل) ... وهذا النوع من الإعداد سيكون من الصعب جدا إدارته.

أود أن أقترح الاستيلاء على برنامج نصي دردشة مجاني من مكان آخر (على سبيل المثال http://tinychat.com/) أو إذا كنت ترغب في لفة الخاصة بك (للمتعة / الخبرة)، فانتقل إلى الأمام، ولكن ابدأ ب DB وبناء صفحة من شأنها دفع وسحب الرسائل من الخادم.

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

أثناء عدم إجراء HTTP لسهولة الدفع، يمكنك محاكاة اتصال الدفع باستخدام برنامج PHP Script لا ينتهي أبدا ويشاهد نتيجة JavaScript بعناية.

أساسا أنك محاكاة قارئ دفق.

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

http://tinychat.com. هو موقع دردشة بسيط آخر.

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

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

ويعرض على الفور على متصفح الجميع

مع PHP / JS لا يمكنك دفع البيانات من الخادم إلى العملاء. لذلك يحتاج عملاؤك إلى طلب البيانات من الخادم. وهذا ما وصفه Scunliffe في منصبه.

يمكنك القيام بذلك بالكامل مع HTML و JavaScript باستخدام خدمة مثل Pubnub.. وبعد لن تحتاج إلى قاعدة بيانات كما يمكنك استخدام شيء مثل التاريخ API. لملء رسائل الدردشة X الأخيرة.

فيما يلي برنامج تعليمي سريع في بناء تطبيق دردشة مع Pubnub.

تطبيقات الدردشة في الوقت الحقيقي في 10 خطوط من التعليمات البرمجية

enter image description here

Enter Chat and press enter
<div><input id=input placeholder=you-chat-here /></div>

Chat Output
<div id=box></div>

<script src=http://cdn.pubnub.com/pubnub.min.js></script>
<script>(function(){
var box = PUBNUB.$('box'), input = PUBNUB.$('input'), channel = 'chat';
PUBNUB.subscribe({
    channel  : channel,
    callback : function(text) { box.innerHTML = (''+text).replace( /[<>]/g, '' ) + '<br>' + box.innerHTML }
});
PUBNUB.bind( 'keyup', input, function(e) {
    (e.keyCode || e.charCode) === 13 && PUBNUB.publish({
        channel : channel, message : input.value, x : (input.value='')
    })
} )
})()</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top