Question Que sont les interrogations longues, les Websockets, les événements envoyés par le serveur (SSE) et Comet?


J'ai essayé de lire quelques articles, mais je ne suis pas encore très clair sur les concepts.

Est-ce que quelqu'un voudrait essayer de m'expliquer ce que sont ces technologies:

  1. Longue interrogation
  2. Événements envoyés par le serveur
  3. Websockets
  4. Comète

Une chose que j'ai rencontrée à chaque fois était que le serveur maintient une connexion ouverte et envoie les données au client. Comment la connexion est-elle maintenue ouverte, et comment le client obtient-il les données poussées? (Comment le client utilise-t-il les données, peut-être que du code pourrait aider?)

Maintenant, lequel d'entre eux devrais-je utiliser pour une application en temps réel. J'ai beaucoup entendu parler de websockets (avec socket.io [une bibliothèque node.js]) mais pourquoi pas PHP?


876
2018-06-18 06:28


origine


Réponses:


Dans les exemples ci-dessous, le client est le navigateur et le serveur est le serveur Web hébergeant le site Web.

Avant de pouvoir comprendre ces technologies, vous devez comprendre classique Le trafic Web HTTP en premier.

HTTP régulier:

  1. Un client demande une page Web à partir d'un serveur.
  2. Le serveur calcule la réponse
  3. Le serveur envoie la réponse au client.

HTTP

Ajax Polling:

  1. Un client demande une page Web à partir d'un serveur utilisant le protocole HTTP standard (voir HTTP ci-dessus).
  2. Le client reçoit la page Web demandée et exécute le code JavaScript sur la page qui demande un fichier au serveur à intervalles réguliers (par exemple 0,5 seconde).
  3. Le serveur calcule chaque réponse et la renvoie, tout comme le trafic HTTP normal.

Ajax Polling

Ajax Long-Polling:

  1. Un client demande une page Web à partir d'un serveur utilisant le protocole HTTP standard (voir HTTP ci-dessus).
  2. Le client reçoit la page Web demandée et exécute le JavaScript sur la page qui demande un fichier au serveur.
  3. Le serveur ne répond pas immédiatement avec les informations demandées mais attend jusqu'à ce qu'il y ait Nouveau informations disponibles.
  4. Lorsque de nouvelles informations sont disponibles, le serveur répond avec les nouvelles informations.
  5. Le client reçoit les nouvelles informations et envoie immédiatement une autre requête au serveur, redémarrant le processus.

Ajax Long-Polling

Événements envoyés du serveur HTML5 (SSE) / EventSource:

  1. Un client demande une page Web à partir d'un serveur utilisant le protocole HTTP standard (voir HTTP ci-dessus).
  2. Le client reçoit la page Web demandée et exécute le JavaScript sur la page qui ouvre une connexion au serveur.
  3. Le serveur envoie un événement au client lorsque de nouvelles informations sont disponibles.

    • Trafic en temps réel entre le serveur et le client, la plupart du temps c'est ce dont vous aurez besoin
    • Vous voudrez utiliser un serveur qui a une boucle d'événement
    • Impossible de se connecter à un serveur d'un autre domaine
    • Si vous voulez en savoir plus, j'ai trouvé cela très utile: (article), (article), (article), (Didacticiel).

HTML5 SSE

Websockets HTML5:

  1. Un client demande une page Web à partir d'un serveur utilisant le protocole HTTP standard (voir HTTP ci-dessus).
  2. Le client reçoit la page Web demandée et exécute le JavaScript sur la page qui ouvre une connexion avec le serveur.
  3. Le serveur et le client peuvent maintenant envoyer des messages les uns aux autres lorsque de nouvelles données (de chaque côté) sont disponibles.

    • Trafic en temps réel du serveur vers le client et du client au serveur
    • Vous voudrez utiliser un serveur qui a une boucle d'événement
    • Avec WebSockets, il est possible de se connecter à un serveur d'un autre domaine.
    • Il est également possible d'utiliser un serveur websocket hébergé par un tiers, par exemple Poussoir ou autres. De cette façon, vous n'aurez qu'à implémenter le côté client, ce qui est très facile!
    • Si vous voulez en savoir plus, je les trouve très utiles: (article), (article) (Didacticiel).

HTML5 WebSockets

Comète:

Comet est une collection de techniques antérieures à HTML5 qui utilisent le streaming et les longues interrogations pour obtenir des applications en temps réel. En savoir plus sur Wikipédia ou ce article.


Maintenant, lequel d'entre eux devrais-je utiliser pour une application en temps réel (que j'ai besoin de   code). J'ai beaucoup entendu parler de websockets (avec socket.io [un   bibliothèque node.js]) mais pourquoi pas PHP?

Vous pouvez utiliser PHP avec WebSockets, consultez Rochet.


1855
2017-10-12 08:57



Tieme a mis beaucoup d'efforts dans son excellente réponse, mais je pense que le cœur de la question OP est de savoir comment ces technologies se rapportent à PHP plutôt que comment chaque technologie fonctionne.

PHP est le langage le plus utilisé dans le développement web en plus du côté client évident html, css et javascript. Pourtant, PHP a deux problèmes majeurs en ce qui concerne les applications en temps réel:

1) PHP a commencé comme un CGI très basique. PHP a progressé très loin depuis le début, mais cela s'est fait par petites étapes. PHP a déjà eu plusieurs millions d'utilisateurs au moment où il est devenu la bibliothèque C intégrable et flexible qu'il est aujourd'hui, dont la plupart dépendait de son modèle d'exécution précédent, donc il n'a pas encore fait une tentative solide pour échapper à la Modèle CGI en interne. Même l'interface de ligne de commande invoque la bibliothèque PHP (libphp5.so sur linux, php5ts.dll sous windows, etc.) comme s'il s'agissait encore d'un cgi traitant une requête GET / POST. Il exécute toujours le code comme s'il devait simplement construire une "page" et ensuite terminer son cycle de vie. En conséquence, il supporte très peu la programmation multi-thread ou événementielle (dans l'espace utilisateur PHP), ce qui le rend actuellement peu pratique pour les applications multi-utilisateurs en temps réel.

Notez que PHP a des extensions pour fournir des boucles d'événements (telles que libevent) et des threads (tels que pthreads) dans l'espace utilisateur PHP, mais très, très peu d'applications les utilisent.

2) PHP a toujours des problèmes importants avec la récupération des ordures. Bien que ces problèmes se soient constamment améliorés (il est probable que ce soit la meilleure étape pour mettre fin au cycle de vie décrit ci-dessus), même les meilleures tentatives de création d'applications PHP à long terme nécessitent un redémarrage régulier. Cela le rend également peu pratique pour les applications en temps réel.

PHP 7 sera une excellente étape pour résoudre ces problèmes, et semble très prometteur en tant que plate-forme pour les applications en temps réel.


31
2017-10-14 07:11



J'ai essayé de noter cela et j'ai rassemblé et écrit des exemples d'un perspective java.

HTTP pour les développeurs Java

Reverse Ajax - Ancien style

Gestion asynchrone côté serveur

Reverse Ajax - Nouveau style

Événements envoyés par le serveur

Le mettre ici pour tout développeur Java qui se penche sur le même sujet.


7
2018-04-21 14:47