Frage

Mehrere Besucher eine Verbindung zum http://site.com/chat.php

Sie können jeweils eine SMS-Nachricht und zeigt sofort auf jeden Browser ( http chat.php schreiben und senden: //site.com/chat.php )

Muss ich eine Datenbank verwenden? Ich meine, ist AJAX oder PHP-Puffer Fähigkeiten genug für einen solchen Chatraum auf Sitzungen?

Wie können Sitzungen der verschiedenen Nutzer zum Austausch von Daten voneinander?

Jede Idee oder Einsichten zu erkennen ist, Dank!

Edit: Danke für die Links. Aber was ich will, ist die Möglichkeit, Daten zu einem Client-Browser zu schieben. Wird ständig erfrischenden Client-Browser (AJAX oder nicht), den einzigen Weg? Auch die Herausforderung hier ist, wie verschiedene Benutzer, zum Beispiel, 2, 1 auf 1, zu teilen Chat Texte? Wie lagern Sie sie? Und wie synchronisieren Sie die Texte zwischen den 2-Clients? Nicht vorzugsweise unter Verwendung einer Datenbank.

Edit 2: Eigentlich YShout erwähnt von Peter D tut dies ziemlich gut Arbeit geleistet. Es scheint nicht refresh den Browser zu halten. Aber ich verstehe nicht, wie es neue Nachrichten schiebt Benutzer-Fenster vorhanden sind.

War es hilfreich?

Lösung

gibt es (in etwa) 3 Optionen für eine Chat-Anwendung zu erstellen:

Steckdosen

  

verwendet Flash / java und Steckdosen für das Frontend und eine Buchse fähige Programmiersprache für das Backend. für das Backend, würde ich Java oder Python empfehlen, weil sie Multithreading und NIO-fähig. es ist möglich, es mit PHP zu tun (aber PHP kann nicht wirklich effizient Multithreading tun und für diesen im Allgemeinen nicht wirklich geeignet ist). Dies ist eine Option, wenn Sie eine hohe Leistung benötigen, und wahrscheinlich nicht das, was Sie suchen.

Verwendung von Ajax und ziehen

  

in diesem Fall werden alle Kunden ständig sind (zum Beispiel je 2 Sekunden) Polling, wenn etwas Neues passiert ist. es fühlt sich seltsam, weil Sie nur Antworten zu diesen Intervallen erhalten. zusätzlich stellt es eine ziemlich Belastung auf Ihrem Server und Bandbreite. Sie wissen, eine Anwendung, die diese Technik verwendet, da der Browser ständig aktualisiert wird. dies ist eine suboptimale Lösung.

Verwendung Ajax und drücken Sie

  

funktioniert dies mit mehrteiliger-Antworten und hat langer Lauf (PHP-) Skripte im Backend. nicht die beste Lösung, aber die meiste Zeit ist es besser als Ziehen und es funktioniert und in mehreren bekannten Chat-Anwendungen verwendet wird. diese Technik manchmal COMET genannt wird.

mein Rat: Wenn Sie eine Chat-Anwendung für den produktiven Einsatz benötigen, installieren Sie einen vorhandenen. Programmierung Chat-Anwendungen sind nicht , die einfach.

, wenn Sie es nur lernen wollen, beginnen Sie mit einem einfachen Ajax / Pull-App, dann versuchen, einen programmieren Ajax und Drück.

und ja, ist vermutlich eine Datenbank benötigen, zäh i erfolgreich umgesetzt eine sehr einfache Ajax / Pull-Lösung, die mit Textdateien für Spaß funktioniert (aber ich würde sicherlich nicht in der Produktion verwenden!).

es ist (mein Wissen, aber ich bin mir ziemlich sicher) nicht möglich, eine Chat-Anwendung ohne serverseitigen Backend (mit nur Frontend Javascript-alone)!

zu erstellen

UPDATE

Wenn Sie wissen wollen, wie die Daten Drücken erfolgt, an der Quelle hier: http: //wehrlos.strain.at/httpreq/client.html . async mehrteiliger ist, was Sie wollen:)

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 heißt jedes Mal Daten ankommen, nicht nur einmal, wie in regelmäßigen Ajax-Requests (ich bin jquery oder Prototyp hier nicht verwenden, so dass der Code ein bisschen übergewichtig ist - das ist wirklich alt: )).

Hier ist die Serverseite Teil:

<?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";

?>

update2

in Bezug auf die Datenbank: Wenn Sie eine nichts gemeinsam benutzte Architektur wie mod_php / cgi im Backend haben, Sie definitley Notwendigkeit einig Art von externen Speichern wie Datenbanken oder Text-Dateien. aber: Sie könnten auf Gedächtnis verlassen, indem Sie Ihren eigenen HTTP-Server zu schreiben (möglich mit PHP, aber ich würde es nicht für ernsthafte Arbeit empfehlen). das ist nicht wirklich kompliziert, aber wahrscheinlich ein bisschen aus dem Rahmen Ihrer Frage ^^

Update3

Ich habe einen Fehler! wurde alles vermischt, weil es eine lange Zeit gewesen ist, ich tatsächlich so etwas wie das tat. hier sind die Korrekturen:

  1. mehrteiliger Reaktionen nur mit Mozilla-Browsern arbeiten und sind daher nur von begrenztem Nutzen. COMET bedeutet nicht, mehrt-Antwort.

  2. COMET bedeutet: traditionelle singlepart Antwort, aber (mit einer Endlos-Schleife und Schlaf) gehalten, bis Daten verfügbar sind. so dass der Browser hat 1 Request / Response für jede Aktion (im schlimmsten Fall), nicht eine Anforderung alle x Sekunden, auch wenn nichts Antwort würdig passiert.

Andere Tipps

Sie erwähnen wollen, dies ohne DB zu arbeiten, und ohne dass der Kunde (n) Abfrage der Server für Updates.

In der Theorie können Sie dies durch die Speicherung der „log“ von Chats in einer Textdatei auf dem Server, und das Ändern Ihrer Seite, so dass der Benutzer hat eine GET-Anfrage auf der chat.php Seite, aber die PHP-Seite eigentlich nie beendet zurück an den Benutzer zu senden. (Zum Beispiel der Antwort nie abgeschlossen)

Sie müssen einige „ no op “ zurück senden Daten, die die Verbindung in Gang zu halten, wenn es keine Nachrichten sind aber in der Theorie würde dies funktionieren.

Das Problem ist, die oben zu tun ist immer noch eine Menge Arbeit. Sie müssten AJAX Beiträge zurück an den Server tun, neue zur Abgabe einer Stellungnahme ... der Browser die die ganze Zeit Spinnen würde der Nutzer (es sei denn, Sie nisten das Chat-Protokoll in einem iframe - zB mehr Arbeit) ... und diese Art Setup wäre sehr schwer zu verwalten nur sein.

Ich würde vorschlagen, einen kostenlosen Chat-Skript aus anderen Ländern greift (zB http://tinychat.com/ ) oder wenn Sie möchten, dass Ihre eigene Rolle (für Spaß / Erfahrung), dann gehen Sie vor, aber mit einem DB starten und eine Seite erstellen, die vorantreiben wird, und ziehen Sie Nachrichten vom Server.

Schließlich, wenn Sie über „Hämmern“ der Server mit AJAX-Anforderungen besorgt sind ... nicht. Gerade in das Chat bauen, dann, wenn Sie feststellen, gibt es Performance-Probleme, Rückkehr zu Stackoverflow mit einer Frage auf, wie es zu optimieren, so dass Hunderte von Anfragen nicht in die Chat überfluten, wenn es keine Aktivität ist.

Während HTTP für leichtes Schieben nicht gemacht wird, können Sie eine Push-Verbindung emulieren, indem das PHP-Skript mit nie beenden und das Ergebnis JavaScript sorgfältig beobachtet werden.

Im Wesentlichen sind Simulieren Sie einen Stream-Reader.

Wenn Sie neue Benutzer möchte eine Geschichte der Chat laden, die aufgetreten sind, bevor sie den Raum, ein DB oder einem anderen Speicher eingegeben erforderlich ist. Es sei denn, Sie versuchen, einen Chat für das Lernen zu schaffen, gibt es zu viele gibt, kostenlos zu nutzen zu stören.

http://tinychat.com ist eine weitere einfache Chat-Website.

AJAX funktioniert gut. Ich habe eine einfache Seite für eine meiner Websites erstellt. Aber ich finde, dass Chat nicht so oft gewöhnen, wie Sie denken würden.

Gemeinsame Nutzung von Daten wird ein wenig komplizierter und wäre einfacher, indem Hosting einen IRC-Server zu erreichen und damit die Benutzer IRC-Clients verwendet werden, die Datenaustauschfähigkeit haben. Obwohl nichts Sie davon ab, einen Benutzer-Upload auf die Website zu stoppen, laden Sie dann andere. Von Mensch zu Mensch wäre schwierig, mit einer Web-Schnittstelle verwenden, da die Benutzer nicht miteinander in irgendeiner Weise verbunden sind.

  

und zeigt sofort auf jedem Browser

Mit PHP / JS Sie können nicht schieben Daten vom Server an den Kunden. So müssen Sie Ihre Kunden für Daten vom Server fragen. Und das ist, was scunliffe in seinem Beitrag beschrieben hat.

Sie können dies tun, vollständig mit HTML und Javascript einen Dienst wie PubNub . Sie würden keine Datenbank benötigen, wie Sie so etwas wie die Geschichte api verwenden könnte , um die letzten x Chat-Nachrichten zu füllen.

Hier ist eine kurze Anleitung einen Chat-App mit PubNub auf dem Aufbau.

Echtzeit-Chat Apps in 10 Lines of Code

eingeben Bild Beschreibung hier

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top