Проверьте MySQL на наличие обновлений и покажите альтернативные уведомления

Я работаю над приложением Java (JSP/Servlets), где пользователи могут отправлять сообщения друг другу. Для этой цели я использую одну таблицу в MySQL с такими полями, как msg_id, sender_id, receiver_id, msg_content и т. д. Когда user_A отправляет сообщение user_B, я хочу отправить уведомление user_B, которое указывает, что у него есть новое сообщение (что-то вроде того, как работают уведомления Facebook).

Я искал решение для этого и обнаружил, что возможный способ реализовать это путем опроса AJAX. Это означает, что, например, каждые 60 секунд приложение будет проверять таблицу, упомянутую выше, на наличие новых строк (сообщений для user_B), а если будут найдены новые сообщения, оно будет выдавать сообщение.

Однако предположим, что подключено 100 пользователей. Это означает, что для каждого отдельного пользователя каждые 60 секунд будет выполняться запрос к базе данных, что звучит довольно плохо.

Не станет ли приложение действительно "тяжелым", когда произойдет нечто подобное приведенному выше примеру? Каковы другие альтернативы для достижения этой цели?

1 ответ

Решение

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

Если я не ошибаюсь, для веб-приложений вы можете использовать websocket для создания соединения с вашим браузером. Это то, что Facebook использует для своих уведомлений.

Для реализации на стороне клиента (javascript) и хорошего объяснения, смотрите эту ссылку. Есть также некоторые примеры на стороне сервера, но не для PHP (например, Node.js или python)

Для серверной части PHP по этой ссылке вы можете найти полную реализацию PHP (но не очень хорошее объяснение).

Другие вопросы по тегам