2016-11-13 3 views
0

Ich versuche, einen Chat mit dieser https://github.com/ghedipunk/PHP-Websockets PHP-Klasse zu schreiben. Jetzt sieht es so aus, als würde JS auf der Client-Seite eine Verbindung zum Server herstellen, dann sendet es eine Anfrage alle 3 Sekunden, und der Server prüft bei jeder Anfrage Nachrichten in der Datenbank und sendet Nachrichten an den Client. Ich denke, es ist nicht gut, dass Client sendet Anfrage einmal 3 Sekunden, und ich frage mich, wie zu tun, dass Server Nachricht an den Client senden, nur wenn es eine neue Nachricht in der Datenbank ist? Dies ist meine erweiterte Prozessfunktion:Chat mit PHP, Websockets und MySQL

protected function process($user, $message) { 
    $databaseHandler = mysqli_connect('blahblah'); 
    $decoded = json_decode($message, true); 
    $chat_id = $decoded['chatid']; 
    $limit = $decoded['limit']; 
    $user_id = filterString($decoded['userid'], $databaseHandler); 
    $SQLQuery = "SELECT chat_messages.message, users.name FROM chat_messages JOIN users ON chat_messages.user_id=users.user_id WHERE chat_messages.chat_id = '$chat_id' ORDER BY chat_messages.message_id DESC LIMIT $limit,5;"; 
    $SQLResult = mysqli_query($databaseHandler, $SQLQuery); 
    $i = 0; 
    $arr = array(); 
    while ($row = mysqli_fetch_assoc($SQLResult)) { 
     $i++; 
     $arr[$i] = $row['name'] . ': ' . $row['message']; 
    } 


    $this->send($user, json_encode($arr)); 

} 

Dies ist JS-Funktion:

function refreshchat() { 

try { 
    socket.send('{"token":"' + token + '","userid":'+ userid +'"chatid":' + chatid + ',"limit":' + limit + '}'); 

} catch (ex) { 
    console.log(ex); 
} 
setTimeout(refreshchat, 3000); 

}

übersprungenen ich Genehmigung Sachen in PHP für die Abfertigung.

Vielen Dank im Voraus!

Antwort

0

Nun, Sie verwenden SetTimeout JavaScript-Funktion. Es läuft nur einmal. Sie können die Funktion setInterval verwenden. Es wird wiederholt ausgeführt. (http://www.w3schools.com/jsref/met_win_setinterval.asp)

Es scheint, dass Sie eine Funktion möchten, die es dem Server ermöglicht, den Client darüber zu informieren, dass eine neue Chat-Nachricht vorhanden ist. Ich denke, die Verwendung von Timer in Javascript ist eine gute Option. Sie können auch die Push-Benachrichtigung api: https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web überprüfen.