Как реализовать уведомление о наборе текста в системе мгновенного обмена сообщениями?

Дописал систему мгновенного обмена сообщениями между пользователями на сайте, и предо мною встала задача, уведомить оппонента о моём наборе текста, и наоборот.
Как в Skype, ICQ, VK, FB вы наверняка это видели.
Так вот, в принципе, это бы не было проблемой, если бы структура БД была иная, сейчас она такая:

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор',
`pm_id` int(11) NOT NULL COMMENT 'Идентификатор диалога',
`to` int(11) NOT NULL COMMENT 'Идентификатор получателя',
`from` int(11) NOT NULL COMMENT 'Идентификатор отправителя',
`message` text NOT NULL COMMENT 'Сообщение',
`datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата и время отправки',
`read` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Прочитано (нет, да)',
`notified` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Уведомлено (нет, да)',


И переписывать всю модель я не горю желанием, собственно вопрос, как максимально просто, реализовать оповещение о наборе текста?
Сейчас я это вижу так, создать таблицу, в которой будет идентификатор диалога, идентификатор пользователя и действие (например: печатает да или нет).
Но встаёт вопрос о другом, сейчас если чат закрыт, или открыт список диалогов, то каждую секунду в БД отправляется запрос, о существовании новых не уведомленных сообщениях, если такие есть, они выгружаются, уведомляют пользователя, и больше не показываются.
Если чат открыт (ну т.е. идёт диалог с конкретным пользователем), то в БД отправляется 2 запроса, на существования новых не уведомленных сообщениях кроме текущего диалога, и также запрос для выгрузки новых сообщений от оппонента.
И с вариантов который выше я показал, при открытом чате, будет уже отправляться 3 запроса в секунду.

А правильно ли вообще, каждую секунду запрашивать у контроллера новые сообщения? Просто я не вижу других вариантов.

Вообщем, как вы посоветуете, реализовать уведомление, о наборе текста в чате?

Спасибо.
  • Вопрос задан
  • 3875 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rowdyro
Вам вообще незачем эту инфу в бд хранить.

Используйте websocket, который просто сообщает, что идет набор текста.

wiki.nginx.org/HttpPushStreamModule
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы