Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Как послать с сервера команду во фронт, чтобы обновить значение определённого компонента?

#javascript #php #клиент_сервер


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

Мне в голову приходит способ делать запрос каждые несколько секунд к бэкенду, но
как-то страшно представить такое количество запросов каждые несколько секунд, поступающее
от каждого менеджера. 

Можно ли как-то отправлять команду с сервера напрямую странице менеджера, с определённой
командой?
    


Ответы

Ответ 1



Способов несколько, в зависимости от тяжести случая можно выбрать тот, который Вам больше всего понравится или который будет проще реализовать. Везде есть свои за и против. 1. Самый древний способ, и самый простой - Polling клиент подключается и говорит: Привет, я Вася, Как там дела? сервер СРАЗУ отвечает: С твоего последнего визита ничего интересного не произошло / Произошли такие-то события и закрывает соединение клиент отправляет новый запрос Я уверен добрая половина интернета работает таким способом. 2. Тоже вариант из прошлого, посложнее - Long Polling клиент подключается и говорит: Привет, я Вася, Сообщи когда что-то произойдет сервер ЖДЕТ пока произойдет событие, отвечает Событие произошло, закрывает соединение. клиент отправляет новый запрос 3. Server Sent Events - обеспечивает отправку сообщений в ОДНУ СТРОНУ, от сервера клиенту. клиент подключается и говорит: Привет, я Вася, жду сообщений и больше не может отправлять сообщения сервер ЖДЕТ пока произойдет событие, отвечает Событие произошло, и не закрывает соединение после отправки Протокол обмена - обычный текст разделенный делимитерами. 4. WebSocket - обеспечивает отправку сообщений в ОБЕ СТОРОНЫ. клиент подключается и спрашивает: Привет, я Вася, жду сообщений и может отправлять еще сообщения в любое время сервер ЖДЕТ пока произойдет событие, отвечает Событие произошло, и не закрывает соединение после отправки Протокол обмена - более сложный чем у SSE, тут уже есть заголовок и другие тонкости. Со стороны сервера, реализация SSE значительно проще, чем реализация вебсокетов. Это на случай если Ваш веб сервер не умеет что то из выше перечисленного из коробки.

Ответ 2



Сам делал подобное: с помощью ajax. Просто ставишь интервал - минуты будет достаточно, а работнику выводишь сообщение - ваше задание будет проверено в течении n-минут. За сервер не бойся, тестируй и смотри нагрузку.

Комментариев нет:

Отправить комментарий