Персональная система обмена сообщениями на основе Ajax в PHP - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь создать систему личных сообщений на основе MySQL, PHP, Ajax.

Существует одна таблица для всех сообщений - msghistory, которая выглядит следующим образом

enter image description here

И еще одна для записей о дате проверки последнего сообщения пользователя - chkdate.

Система работает следующим образом:

Когда пользователь входит на страницу, страница запускает автоматическую проверку Ajax.Ajax вызывает php каждые 10 секунд.PHP сторона проверяет наличие новых сообщений по идентификатору пользователя.Сначала проверяет chkdate, затем проверяет msghistory: если после даты последней проверки нет сообщений, то система не будет уведомлять пользователя, иначе уведомит об этом

Я думаю, что этот способ сильно загрузит сервер, еслиЕсть тысячи пользователей.Интересно, если описанный выше способ является оптимальным?если нет, что вы думаете об этом, какой путь лучше?

1 Ответ

1 голос
/ 08 февраля 2012

Длинный опрос - хорошая идея.Вот примерно как это работает (хотя вы можете варьировать продолжительность используемого времени).Пусть ваш PHP-скрипт (тот, который запрашивает клиент) запускает (полу) бесконечный цикл, который проверяет наличие нового сообщения в базе данных.Если сообщение не найдено, используйте функцию sleep (), чтобы подождать десять секунд или около того, прежде чем цикл снова пройдет.Как только сообщение найдено, отправьте его клиенту и выйдите из цикла.Затем клиент может отобразить сообщение, а затем запустить новый запрос к PHP-сценарию «с длинным опросом» еще через десять секунд.

Вот демонстрационный PHP-скрипт: $ username = $ _ GET ["username"];

<?php
while(1) {
    $messages=mysql_query("SELECT * FROM `msghistory` WHERE `to_id`='$username'");
    if (!mysql_num_rows($messages) === 0) {
        //do whatever message processing and printout you need to do here
        break;//break out of the loop. the script terminates and returns its messages to the client
    }
}
?>

В ближайшем будущем мы увидим реализацию WebSockets, которая обеспечивает двухтактную связь между клиентом и сервером в режиме реального времени.Однако во многих случаях эта технология еще не готова к использованию.До тех пор долгий опрос - это путь.

...