Notification push | Est-ce que le websocket est obligatoire?

J'ai PHP sur le côté du serveur, et HTML et javascript du côté client.

Je fais une application où un intervenant saisit un message diffusé en plusieurs fois sur plusieurs récepteurs d'un groupe en temps réel.

J'ai fait des recherches sur google et je comprends que j'ai besoin d'utiliser WebSockets ou Comet pour les notifications instantanées en temps réel. WebSocket ou Comet est-il obligatoire pour l'envoi de notifications de masse aux utilisateurs?

Ma compréhension est-elle correcte? Des références pour commencer?

Si le client est un navigateur, les SEULEMENT deux façons dont un navigateur standard peut se connecter à un serveur est via une requête Ajax (p. Ex. Http) ou une connexion WebSocket. Donc, si vous voulez que le client soit informé de quelque chose du monde extérieur, il doit utiliser l'un de ces deux mécanismes.

Les demandes HTTP sont transitoires. Le client demande une serveuse, le serveur répond. Les demandes HTTP sont parfaites pour le client demandant des informations du serveur. Ils ne sont pas très bons au serveur en envoyant des informations au client car normalement le client n'est pas connecté. Il existe des hacks et des work-around où le client "interroge" le serveur sur un certain intervalle et peut-être même que le serveur utilise des requêtes de plus longue durée pour essayer de simuler un système de type "push", mais ce sont des pirates sous-optimaux au mieux.

Les connexions Web sont continues. Le client se connecte et la connexion reste en place aussi longtemps que les deux parties le souhaitent. Cela permet à chaque côté de pouvoir envoyer un message à l'autre côté chaque fois qu'il le souhaite. Cela signifie que le serveur peut "pousser" les données vers le client quand il le veut. Les webSockets sont efficaces pour les connexions push et sont recommandés (c'est l'une des principales choses pour lesquelles ils ont été conçus).

Comet est une bibliothèque qui a été construite à l'origine pour utiliser HTTP pour tenter de "pirater" ou "simuler" la poussée avant que les webSockets ne soient inventées et avant qu'elles ne soient largement prises en charge. Je ne peux penser à aucune raison pour laquelle on voudrait utiliser Comet au lieu d'un webSocket, sauf si vous aviez un ancien navigateur que WebSocket n'était pas pris en charge.

Donc, si vous essayez de faire "push" en temps réel sur un navigateur, vous devez avoir une prise connectée en continu du client qui signifie webSocket (ou quelque chose construit sur le WebSocket comme socket.io).

Pour les applications téléphoniques où vous avez accès au SDK du téléphone, vous pouvez utiliser le système "push" intégré au système d'exploitation pour envoyer certains messages du serveur au client. Ce n'est pas tout à fait le même que le canal bidirectionnel, mais comme vous avez posé des questions sur les «notifications push», les services push OS disponibles dans Android et IOS pourraient également être une option pour pousser les notifications du serveur vers le client. Voici les informations sur les notifications iOS et Google Cloud Messaging

À partir de 2016, on peut également utiliser les événements envoyés par Serveur dans tous les navigateurs modernes, à l'exception des navigateurs Microsoft (non encore pris en charge par Edge ou IE) pour envoyer les données du serveur au client. Voici une table de compatibilité de navigateur . Les événements envoyés par serveur utilisent une connexion HTTP longue durée, un type MIME spécial et un client supportant afin de pouvoir envoyer des événements du serveur au client à tout moment. Contrairement aux webSockets, les événements envoyés par le serveur sont d'une manière unique (du serveur au client). Un client utiliserait alors un appel Ajax traditionnel pour pouvoir envoyer des données à un serveur (alors que les données d'un webSocket peuvent être envoyées soit sur la même connexion webSocket).

Voici une bonne description de la façon dont les événements envoyés par le serveur fonctionnent: comment les événements envoyés par le serveur fonctionnent réellement?