web-dev-qa-db-fra.com

Notification Push | Websocket est-il obligatoire?

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

Je crée une application dans laquelle une partie prenante tape un message qui est diffusé à plusieurs destinataires d'un groupe en temps réel.

J'ai fait des recherches sur google et je comprends que je dois utiliser WebSockets ou Comet pour les notifications Push en temps réel. WebSocket ou Comet sont-ils obligatoires pour l'envoi de notifications en masse aux utilisateurs?

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

21
John Franky

Si le client est un navigateur, UNIQUEMENT un navigateur standard peut se connecter à un serveur via une requête Ajax (par exemple, http) ou une connexion webSocket. Donc, si vous voulez qu'un client soit averti de quelque chose du monde extérieur, il doit utiliser l'un de ces deux mécanismes.

Les requêtes HTTP sont transitoires. Le client fait une demande à un serveur, le serveur répond. Les requêtes HTTP conviennent parfaitement au client qui demande des informations au serveur. Ils ne sont pas très doués pour que le serveur envoie des informations au client, car ce dernier n’est normalement pas connecté. Il existe des hacks et des solutions de contournement où le client "interroge" le serveur à un intervalle donné et peut-être même le serveur utilise des requêtes plus longues pour essayer de simuler un système de type "Push", mais il s'agit au mieux de piratages sous-optimaux.

webSockets sont des connexions continues. Le client se connecte et la connexion reste en place aussi longtemps que le souhaitent les deux côtés. Cela permet à l’un ou l’autre côté d’envoyer un message quand ils le souhaitent. Cela signifie que le serveur peut "transmettre" les données au client quand il le souhaite. Les webSockets sont efficaces pour les connexions Push et sont recommandés (c’est l’un des principaux objets pour lesquels ils ont été conçus).

Comet est une bibliothèque qui a été initialement conçue pour utiliser HTTP afin de tenter de "pirater" ou de "simuler" Push avant que les webSockets aient été inventés, puis avant d'être largement pris en charge. Je ne vois aucune raison pour laquelle on voudrait utiliser Comet au lieu d'un webSocket, à moins que vous n'ayez un navigateur aussi ancien que webSocket ne soit pas pris en charge.

Ainsi, si vous essayez d'effectuer un "Push temps réel sur le serveur" sur un navigateur, vous devez disposer d'un socket connecté en permanence à partir du client, ce qui signifie webSocket (ou quelque chose construit sur le dessus de webSocket comme socket.io).

Pour les applications téléphoniques où vous avez accès au kit de développement logiciel (SDK) du téléphone, vous pouvez utiliser le système "Push" intégré au système d'exploitation pour transmettre certains messages du serveur au client. Ce n'est pas tout à fait la même chose que le canal bidirectionnel webSocket, mais puisque vous avez posé une question sur les "notifications Push", les services OS Push disponibles dans Android et IOS pourraient également être une option permettant de transmettre des notifications du serveur au client. . Voici des informations sur notifications iOS _ et Google Cloud Messaging

À partir de 2016, on peut également utiliser _ événements envoyés par le serveur dans tous les navigateurs modernes, à l'exception des navigateurs Microsoft (non encore pris en charge dans Edge ou IE) pour transférer les données d'un serveur à un client. Voici un tableau de compatibilité de navigateur . Les événements envoyés par le serveur utilisent une connexion HTTP longue durée, un type MIME spécial et un client pris en charge afin de pouvoir envoyer des événements du serveur au client à tout moment. Contrairement à webSockets, les événements envoyés par le serveur ne peuvent être utilisés que dans un sens (de serveur à client). Un client utiliserait alors un appel Ajax traditionnel pour pouvoir envoyer des données à un serveur (alors qu'avec un WebSocket, les données peuvent être envoyées dans les deux sens via la même connexion webSocket).

Voici une bonne description du fonctionnement des événements envoyés par le serveur: Comment fonctionnent réellement les événements envoyés par le serveur?

35
jfriend00

Je dirais que l'utilisation de webSockets est un moyen plus efficace que d'autres options, pourquoi? Eh bien, lorsqu'un client reçoit une notification l'informant d'un changement de serveur, il n'est pas nécessaire de créer un appel AJAX au serveur pour obtenir ce changement. AJAX. Cela signifie un code efficace et une application plus rapide!

0
Libby Lebyane