1138 votes

Quels sont le Long du Scrutin, les Websockets, Server-Sent Events (ESS) et de la Comète?

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

Un homme comme pour une prise à m'expliquer ce que ces technologies sont:

  1. Le Temps D'Interrogation
  2. Serveur-Événement Envoyé
  3. Les Websockets
  4. La comète

Une chose que je suis venu à travers de tous les temps a été, le serveur conserve une connexion ouverte et pousse des données au client. Comment est la connexion ouverte, et comment le client d'obtenir la poussée? (comment le client ne peut utiliser les données, peut-être un code peut aider?)

Maintenant, lequel des deux dois-je utiliser pour un réel moment de l'app. J'ai entendu beaucoup de choses sur les websockets (avec la prise.io [un node.js bibliothèque]), mais pourquoi ne pas en PHP?

2210voto

Tieme Points 13569

Dans les exemples ci-dessous, le client est le navigateur et le serveur est le serveur web qui héberge le site.

Avant que vous pouvez comprendre ces technologies, vous devez comprendre classique http trafic web en premier.

Http:

  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 d'Interrogation:

  1. Un client demande une page web à partir d'un serveur à l'aide de http (voir http ci-dessus).
  2. La page web demandée exécute le javascript qui demande un fichier à partir du serveur à intervalles réguliers (par exemple, 0,5 secondes).
  3. Le serveur calcule chaque réponse et l'envoie de retour, tout comme la normale du trafic http.

AJAX Polling

AJAX le Long du Scrutin:

  1. Un client demande une page web à partir d'un serveur à l'aide de http (voir http ci-dessus).
  2. La page web demandée exécute le javascript qui demande un fichier à partir du serveur.
  3. Le serveur n'a pas immédiatement répondu à la demande d'informations mais attend jusqu'à ce qu'il y a de nouvelles informations disponibles.
  4. Quand il y a des nouvelles informations disponibles, le serveur répond avec les nouvelles informations.
  5. Le client reçoit les nouvelles de l'information et l'envoie immédiatement une autre demande au serveur, re-commencer le processus.

AJAX Long-Polling

HTML5 Serveur a Envoyé des Événements (ESS) / EventSource:

  1. Un client demande une page web à partir d'un serveur à l'aide de http (voir http ci-dessus).
  2. La page web demandée exécute le javascript qui ouvre une connexion vers le serveur.
  3. Le serveur envoie un événement pour le client quand il y a des nouvelles informations disponibles.

    • Le trafic en temps réel à partir du serveur vers le client, surtout que ce dont vous aurez besoin
    • Vous aurez envie d'utiliser un serveur qui a une boucle d'événement
    • Pas possible de se connecter à un serveur à partir d'un autre domaine
    • Si vous voulez en savoir plus, j'ai trouvé ces très utiles: (article), (article), (article), (tutoriel).

HTML5 SSE

Les Websockets HTML5:

  1. Un client demande une page web à partir d'un serveur à l'aide de http (voir http ci-dessus).
  2. La page web demandée exécute le javascript qui ouvre une connexion avec le serveur.
  3. Le serveur et le client peut maintenant envoyer des messages les uns aux autres lorsque de nouvelles données (de chaque côté) est disponible.

    • Le trafic en temps réel à partir du serveur vers le client et du client vers le serveur
    • Vous aurez envie d'utiliser un serveur qui a une boucle d'événement
    • Avec les WebSockets, il est possible de se connecter à un serveur à partir d'un autre domaine.
    • Il est également possible d'utiliser un tiers hébergé serveur websocket, par exemple Poussoir ou autres. De cette façon, vous n'aurez qu'à mettre en œuvre le côté client, ce qui est très facile!
    • Si vous voulez en savoir plus, j'ai trouvé ces très utiles: (article), (article) (tutoriel).

HTML5 WebSockets

Comète:

La comète est un ensemble de techniques d'avant HTML5 qui utilisent la diffusion en continu et de longue interrogation pour réaliser des applications en temps réel. Lire la suite sur wikipedia ou cet article.


Maintenant, lequel des deux dois-je utiliser pour une application en temps réel (que j'ai besoin de le code). J'ai entendu beaucoup de choses sur les websockets (avec la prise.io [un nœud.bibliothèque js]), mais pourquoi ne pas en PHP ?

Vous pouvez utiliser PHP avec les WebSockets, découvrez Cliquet.

42voto

JSON Points 564

Tieme mis beaucoup d'efforts dans sa réponse, mais je pense que le cœur de votre question est de savoir comment ces technologies concernent PHP. PHP est la langue la plus utilisée dans le développement web en outre l'évident côté client html, css, et javascript. Pourtant, PHP a 2 problèmes majeurs quand il s'agit pour les applications en temps réel:

1) de PHP qui a commencé comme un CGI écrits en Perl. PHP a beaucoup progressé depuis qu'il est tôt, mais c'est arrivé dans de petites étapes. PHP avait déjà plusieurs millions d'utilisateurs par le temps, il est devenu le embed-mesure et flexible de la bibliothèque C qu'il est aujourd'hui, dont la plupart étaient à la charge sur le modèle antérieur de l'exécution, de sorte qu'il n'a pas encore fait une tentative sérieuse pour échapper à la cgi modèle interne. Même l'interface de ligne de commande appelle la bibliothèque PHP (libphp5.donc sur linux, php5ts.dll sur windows, etc) comme si c'est encore un cgi traitement d'un GET/POST demande. Il s'exécute encore le code comme si il suffit de créer une "page", puis la fin de son cycle de vie. En conséquence, il a très peu de support pour le multi-thread ou de la programmation événementielle (au sein de l'espace utilisateur PHP), il est actuellement peu pratique en temps réel, multi-applications de l'utilisateur. Un grand exemple de ceci à partir d'un point de vue de l'espace utilisateur PHP est l'utilisation de "l'echo" et "imprimer" dans des applications PHP. Que serait un script PHP en l'absence de ces fonctions?

Notez que PHP n'ont des extensions de fournir une boucle d'événement (comme les libevent) et les fils (comme les pthreads) dans l'espace utilisateur PHP, mais très, très, peu d'applications utilisent ces.

2) de PHP a encore beaucoup de problèmes avec la collecte des ordures. Bien que ces questions ont été constamment à améliorer (probablement, il est plus grand pas à la fin du cycle de vie, comme décrit ci-dessus), même le meilleur des tentatives au long de la création de l'exécution des applications PHP besoin d'être redémarré sur une base régulière. Ce aussi le faire, peu pratique pour les applications en temps réel.

Il y a toujours des façons d'utiliser PHP pour une utilisation en temps réel des applications, mais ce n'est pas une tendance de la langue à l'époque, car c'est en grande partie "naturelle" de l'état actuel de PHP. PHP est encore en train d'évoluer dans de grands pas, mais a besoin d'un assez vaste, face-lift "aimé" autant que d'autres moins utilisés (mais beaucoup plus populaire) langues comme l'node.js. PHP a une mauvaise réputation dans certains domaines, mais en toute équité, c'est le manque de louange est justifiable en raison de ses problèmes internes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X