2016-09-08 9 views
0

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

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

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

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

+0

Помог ли мой ответ вам в любом случае? У тебя есть вопросы? –

+0

Я пытаюсь найти пример о том, как реализовать это с помощью WebSockets. Я приму свой ответ, как только я это сделаю. У вас есть что-то в виду? Я имею в виду пример или что-то в этом роде. – pirox22

+0

Посмотрите на мой ответ, я приложил несколько хороших примеров реализации. –

ответ

1

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

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

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

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