Как отобразить оповещение от сервера на разных страницах для разных пользователей отдельно?

Всем привет, столкнулся с проблемой, как можно реализовать принцип разных оповещений:
  1. Есть 6 пользователей из них:
    • 3 пользователя авторизованы на сайте
    • 3 пользователя не авторизованы на сайте

  2. Есть 3 страницы:
    • 1-я страница "Статьи" (на этой странице отображаются все статьи и количество комментарий к каждой статьи)
    • 2-я страница "Одна определенная статья" (на это странице отображается содержимое определенной статьи, блок комментариев, а так же поле добавления комментария )
    • 3-я страница "Главная" (главная страница сайта)

  3. Размещение пользователей:
    • 1-й авторизованный пользователь находится на 2-ой странице("Одна определенная статья")
    • 1-й не авторизованный пользователь находится на 2-ой странице("Одна определенная статья")
    • 2-й авторизованный пользователь находится на 1-ой странице("Статьи")
    • 2-й не авторизованный пользователь находится на 1-ой странице("Статьи")
    • 3-й авторизованный пользователь находится на 3-ей странице("Главная")
    • 3-й не авторизованный пользователь находится на 3-ей странице("Главная")

  4. После добавления комментария в бд, нужно:
    • Что бы 1-й авторизованный пользователь находящийся на 2-ой странице("Одна определенная статья"), увидел сам комментарий в блоке под статьей
    • Что бы 1-й не авторизованный пользователь находящийся на 2-ой странице("Одна определенная статья"), увидел сам комментарий в блоке под статьей
    • Что бы 2-й авторизованный пользователь находящийся на 1-ой странице("Статьи"), увидел +1 комментарий к статье для которой был добавлен комментарий
    • Что бы 2-й не авторизованный пользователь находящийся на 1-ой странице("Статьи"), увидел +1 комментарий к статье для которой был добавлен комментарий
    • Что бы 3-й авторизованный пользователь находится на 3-ей странице("Главная"), получил Push уведомление(как в вк, при новом сообщении, когда находишься на любой странице, кроме "Сообщения", появляется Push уведомление слева снизу страницы )
    • Что бы 3-й не авторизованный пользователь находится на 3-ей странице("Главная"), ни чего не получил


Использую Websocket-ы, на стороне сервера workerman.
После нажатия кнопки добавить комментарий, сначала при помощи ajax, добавляю данные в бд, а что дальше делать не знаю...
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
Слишком много текста. Пиши короче. Правильно заданный вопрос - уже половина ответа.

как в workerman-е, получить содержимое $_COOKIE ?

я же тебе уже кидал ссылку на мои примеры:
https://github.com/morozovsk/workerman-examples
вот здесь как раз и есть пример с $_COOKIE:
https://github.com/morozovsk/workerman-examples/bl...

на странице статей нету $_GET параметра, который бы индефицировал пользователя

так он и не должен быть на странице статей. $_GET вызывается в вебсокет сервере.

На странице статей надо так:
<script>
        ws = new WebSocket("ws://127.0.0.1:8000/?user=<?=$user?>");
        ws.onmessage = function(evt) {alert(evt.data);};
</script>


Тогда указанный параметр пробросится в вебсокет сервер и будет доступен в $_GET

Согласно моего примеру ты можешь пробросить в гет-параметр любую инфу, например, какая эта страница или какой айди статьи. А дальше уже используя эту инфу заполняешь в вебсокетсервере массив с нужной тебе связью (например так), кто где находится и позже из основного сайта отправляешь уведомление, в вебсокет сервер на основе хранищийся в нём информации (кто где находится на сайте) отправляет уведомление тому кому надо.

Если для тебя это слишком сложно, тогда возможно тебе взять что-то другое вместо воркермана, там где уже есть реализация схемы pub/sub. Хотя она может уже и в воркермане есть.

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

Важно:
Куки на порту 80 и на порту 1234 разные, это ты можешь сам убедиться открыв историю запросов в консоли браузера.
Чтобы куки в вебсокет сервере были такие же как и на основном сайте вебсокет сервер нужно проксировать, например через nginx.
Что-то типа:
location / - php
location /websocket - proxy_pass на 1234
Ответ написан
Ваш ответ на вопрос

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

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