Как обновлять данные через webSocket?

Здравствуйте, уважаемые программисты!
Второй день пытаюсь понять и изучить принцип работы webSocket.
Пока только удалось создать сокет на сервере и подключаться как клиент, с тестовой отправкой сообщения.
Я использовал Библиотеку

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

И основной вопрос. Если использовать webSocket для обновления различных данных на сайте, в режиме реального времени, означает ли это, что нужно постоянно сыпать кучу запросов в БД, чтобы проверять изменения? Или тут можно "перехватывать изменения" еще до попадания их в БД и сразу отправлять пользователю?

Прошу прощения за кучу вопросов, но я только начал разбираться, заинтересовала эта технология, а конкретных ответов по интернету не нашел, стандартные примеры под типа того, что я прикрепил в этом вопросе
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
Jeer
@Jeer
уверенный пользователь
Привет, из комментов я узнал, что вы пишете на пхп, поэтому с кодом помочь не могу. Но, тем не менее, смутило, что вы не смогли найти примеров в гугле. Забейте php chat websoket пример - результатов море.
Обычно библиотеки по ним реализуют паттерн издатель-подписчик.
Когда клиент устанавливает подключение с сервером по вебсокету, ему выдаётся некий идентификатор.

Соответственно, на сервере хранится список установленных подключений.
Далее с сервера вы можете отправлять сообщения либо по идентификатору какому-то конкретному клиенту, либо есть команда "отправить всем" - не важно сколько клиентов у вас подключено.
У отправляемого сообщения есть тип сообщения (можно использовать один тип, отправляя json и далее его разбирать на клиенте) а клиенты в браузере подписываются на рассылку.

Следующий вопрос, допустим, у вас у клиента1 открыт на экране список пользователей. Установлено соединение по вебсокету и вы подписаны на событие "изменение пользователя". Когда пользователь2 редактирует свой профиль или регистрируется в системе, до того, как запись попадёт в базу данных, вы эту запись отправляете в библиотеку с вебсокетами. Там делаете мгновенную рассылку на всех подключённых клиентов, событие "изменение пользователя" и либо айдишник пользователя, либо всю модель пользователя можно упаковать в json и отправить целиком.
Далее на клиенте вы получаете это сообщение и обновляете данные на странице.
Под такую логику подходят spa-решения, например, реакт или ангуляр, где можно держать один сервис пользователей, который будет выполнять роль прокси, либо забирать первым запросом доступные данные, либо отслеживать изменения по вебсокетам
Ответ написан
Ваш ответ на вопрос

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

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