2016-04-16 9 views
0

Ich baue eine Webanwendung mit PHP, JavaScript/jQuery und MySQL. Im Moment versuche ich, eine Chat-Funktion zu implementieren, die es zwei Benutzern ermöglicht, die beide online sind, miteinander zu chatten (z. B. NICHT einen großen Chat-Raum, sondern nur private Chats zwischen zwei Benutzern). Allerdings habe ich bei der Umsetzung in die folgenden Fragen lauteten:PHP AJAX - Chat Funktionalität

  1. Wie kann ich lassen ein Benutzer wissen, ob ein anderer Benutzer die gerade online ist oder nicht? Jetzt habe ich eine Seite, auf der ein Benutzer den Namen anderer registrierter Benutzer sehen kann. Ich hoffe, diejenigen, die gerade eingeloggt sind, von denen zu unterscheiden, die nicht eingeloggt sind. Derzeit, wenn ein Benutzer angemeldet ist, speichere ich seinen Benutzernamen in $_SESSION['name']. Wie kann ein Benutzer wissen, ob auch ein anderer Benutzer $_SESSION['name'] eingestellt ist?

  2. Wie kann ich sicherstellen, dass die Konversation für zwei Benutzer privat ist? Ich habe derzeit eine Seite mit dem Namen "chat.php", in der sich die Chat-Oberfläche befindet. Wenn ein Benutzer auf den Namen eines anderen Benutzers klickt, der auch online ist, werden die beiden zu ihrer eigenen "chat.php" geleitet. Ebenso sollten andere Benutzer den Chat nicht sehen können, an dem sie nicht beteiligt sind. Ich denke gerade darüber nach, eine eindeutige Seite für die zwei Benutzer zu erstellen, wie "chat.php?user1=Tom&user2=John". Aber wie genau soll ich das erreichen? Ich bin neu in PHP.

  3. Um die neue Nachricht anzuzeigen, wenn die andere Person gerade eine gesendet hat, können wir dies mit Ajax auf ereignisgesteuerte Weise tun? Oder können wir nur Umfragen verwenden? Ich bin derzeit mit Abfrage wie folgt aus, aber ich fühle, dass die Abfrage nicht jeder effizient ist:

    // "logs.php" reads chat message from the database 
    setInterval(function(){ 
        $.get("logs.php", {}, function(resp) { 
         // display the response 
        }); 
    }, 1000); // poll every second 
    

Jede Eingabe an eine der oben genannten Fragen zu schätzen wissen! Vielen Dank.

+0

1) normalerweise nach der Zeit zuletzt aktiv JimL

+0

@JimL Kannst du näher erklären, wie man 1) ein Intervall benutzt, um einen Benutzer zu bestimmen, der online ist? 2) einen Chat-Raum erstellt und die beiden Benutzer "hinzufügt"? Danke – fittaoee

+0

1) speichern Sie die Zeit jedes Mal, wenn ein Benutzer etwas (navigiert zu einer Site, sendet eine Nachricht, etc). Wenn dies weniger als 5 Minuten her ist, dann betrachten Sie den Benutzer als "aktiv". 2) Erstellen Sie eine Raumtabelle mit einer Autoinkrement-ID, user_id_1 und user_id_2, erstellen Sie einen neuen Raum und fügen Sie die beiden Benutzer hinzu. Haben Sie eine Seite, die die Raum-ID annimmt, überprüft, ob der Benutzer eine der beiden hinzugefügten Benutzer-IDs ist, und wenn ja, zeigen Sie einige Chat-Sachen an. – JimL

Antwort

0

Ich arbeite derzeit auch an Chat, unter Antwort sind nach meinem besten Wissen, wenn Sie etwas falsch finden, bitte kommentieren Sie es.

Antwort 1 // Mit der Verwendung der Sitzung werden Sie nicht in der Lage zu bekommen, wer eingeloggt sind und wer nicht, zu überprüfen, müssen Sie Flag in der Datenbank setzen und von dort abholen eingeloggten Benutzer auseinander vom aktuellen Sitzungsbenutzer.

Antwort 2 // Hier mischen Sie zu verschiedenen Chat-Konzept, z. B. eins zu eins Chat (privates Chat) und ein anderes ist Gruppen-Chat. Was ich bevorzuge, ist, unterschiedliche Chat-Dateien für beide Konzepte zu erstellen. Betrachten Sie ein Szenario, in dem Sie 100 Benutzer chatten in der Gruppe können Sie nicht 100 Benutzer-ID durch Ajax senden.

Antwort 3 // Long Polling ist die Methode, mit der Sie Echtzeit-Chat-Update erreichen können. Aber trotzdem gibt es so viele Möglichkeiten, lange Abfragen mit PHP zu verwenden. In erster Linie ist der Hauptnachteil, lange Abfragen zu verwenden, die Verwendung von mehr Ressourcen, wenn der Benutzer zunimmt.

Also abschließend versuchen, Web-Socket-Programmierung zu verwenden oder ein anderes Framework wie node.js zu implementieren.

Wenn Sie weniger Benutzer haben, dann können Sie definitiv lange Abfragen mit PHP verwenden.