Я пытаюсь написать чат, используя этот класс PHP https://github.com/ghedipunk/PHP-Websockets. Теперь похоже, что при запуске JS на стороне клиента подключитесь к серверу, затем он отправит запрос через 3 секунды, а сервер на каждом запросе проверяет сообщения в базе данных и отправляет сообщения клиенту. Я думаю, что это не хорошо, что клиент отправляет запрос раз в 3 секунды, и мне интересно, как это сделать, этот сервер отправляет сообщение клиенту, только когда в базе данных появляется новое сообщение? Это моя расширенная функция процесса:Чат с использованием PHP, websockets и 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));
}
Это функция JS:
function refreshchat() {
try {
socket.send('{"token":"' + token + '","userid":'+ userid +'"chatid":' + chatid + ',"limit":' + limit + '}');
} catch (ex) {
console.log(ex);
}
setTimeout(refreshchat, 3000);
}
Я пропустил материал авторизации в PHP для оформления.
Спасибо заранее!