2016-11-13 127 views
0

我正在嘗試使用這個https://github.com/ghedipunk/PHP-Websockets PHP類寫一個聊天。現在看起來,在客戶端連接到服務器的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的間隙。

預先感謝您!

回答