Push-уведомление | обязательна ли websocket?

У меня PHP на стороне сервера, а HTML и javascript – на стороне клиента.

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

Я сделал некоторые исследования в Google, и я понимаю, что мне нужно использовать WebSockets или Comet для оповещений в режиме реального времени. Является ли WebSocket или комета обязательной для отправки массовых уведомлений пользователям?

Правильно ли я понимаю? Любые ссылки для начала?

Если клиент является браузером, то ТОЛЬКО два способа, которым стандартный браузер может подключаться к серверу, – это запрос Ajax (например, http) или соединение с веб-сокетом. Итак, если вы хотите, чтобы клиент получил уведомление о чем-то из внешнего мира, он должен использовать один из этих двух механизмов.

HTTP-запросы являются временными. Клиент делает запрос на сервер, сервер отвечает. HTTP-запросы идеальны для клиента, запрашивающего информацию с сервера. Они не очень хороши на сервере, отправляющем информацию клиенту, потому что обычно клиент не подключен. Существуют хаки и обходы, когда клиент «опросывает» сервер на определенном интервале и, возможно, даже сервер использует более длительные запросы на запуск, чтобы попытаться имитировать систему «push», но в лучшем случае они являются субоптимальными хаками.

webSockets – это непрерывные соединения. Клиент подключается, и соединение остается на месте до тех пор, пока обе стороны хотят. Это позволяет любой стороне возможность отправлять сообщение на другую сторону, когда захотят. Это означает, что сервер может «нажимать» данные клиенту всякий раз, когда захочет. webSockets эффективны для push-соединений и рекомендуются (это одна из главных вещей, для которых они были разработаны).

Комета – это библиотека, которая изначально была создана для использования HTTP, чтобы попытаться «взломать» или «имитировать» нажатие до того, как были изобретены веб-узлы, а затем, прежде чем они получили широкую поддержку. Я не могу придумать никаких причин, по которым можно было бы использовать Comet вместо webSocket, если у вас не было такого старого браузера, который не поддерживался webSocket.

Итак, если вы пытаетесь сделать «переключение сервера в реальном времени» в браузер, тогда у вас должен быть подключенный к сети сокет, что означает webSocket (или что-то построенное поверх webSocket, такого как socket.io).

Для телефонных приложений, в которых у вас есть доступ к SDK телефона, вы можете использовать систему «push», встроенную в ОС, для перемещения сообщений от сервера к клиенту. Это не совсем то же самое, что и двухканальный канал webSocket, но поскольку вы спрашивали о «push-уведомлениях», службы push-push OS, доступные как в Android, так и в IOS, также могут быть возможностью для push-уведомлений с сервера на клиент. Вот информация об уведомлениях iOS и облачных сообщениях Google

По состоянию на 2016 год можно также использовать события, отправленные сервером во всех современных браузерах, за исключением браузеров Microsoft (еще не поддерживаемых в Edge или IE) для передачи данных с сервера на клиент. Вот таблица совместимости браузера . События, отправленные сервером, используют длительное HTTP-соединение, специальный тип MIME и поддерживающий клиент, чтобы иметь возможность отправлять события с сервера на клиент в любое время. В отличие от web-сокетов, события, отправленные сервером, являются только одним способом (от сервера к клиенту). Затем клиент будет использовать традиционный вызов Ajax, чтобы иметь возможность отправлять данные на сервер (тогда как данные webSocket могут быть отправлены любым способом через одно и то же соединение с WebSocket).

Вот хорошее описание того, как работают события, отправленные сервером: как реально выполняются серверные события?