Les WebSockets protocole vs HTTP
Il existe beaucoup de blogs et de discussions à propos de websocket et HTTP, et de nombreux développeurs et les sites fermement défendre les websockets, mais je n'arrive toujours pas à comprendre pourquoi.
par exemple (les arguments de websocket les amateurs):
Websockets HTML5 représente la prochaine évolution de la communication web—un full-duplex, canal de communication bidirectionnel qui opère à travers un socket unique sur le Web.
( http://www.websocket.org/quantum.html )
HTTP soutient streaming: le corps de la requête de diffusion(vous l'utilisez alors que le téléchargement de fichiers volumineux) et le corps de la réponse en streaming.
Cours de mise en relation avec WebSocket, le client et le serveur échangent des données par trame qui est de 2 octets chacun, par rapport à 8 kilo-octets d'en-tête http lorsque vous effectuez une interrogation continue.
Pourquoi n'a que 2 octets de ne pas inclure tcp et en vertu de protocoles tcp dessus?
GET /about.html HTTP/1.1
Host: example.org
C'est ~48 octets d'en-tête http.
http fragments de codage - http://ru.wikipedia.org/wiki/Chunked_transfer_encoding :
23
This is the data in the first chunk
1A
and this is the second one
3
con
8
sequence
0
- Donc, les frais généraux par chaque morceau n'est pas grand.
Également dans le protocole fonctionne sur TCP, de sorte que tous TCP problèmes à long live les connexions sont toujours là.
Question:
- Pourquoi les websockets protocole de mieux?
- Pourquoi il a été mis en œuvre au lieu de la mise à jour du protocole http?
- Quelle est votre question?
- 1) pourquoi les websockets protocole est le meilleur? 2) Pourquoi il a été mis en œuvre au lieu de la mise à jour du protocole http? 3) Pourquoi les websockets sont ainsi promues?
- vous pouvez le faire avec les sockets TCP ou http pour les applications de bureau; et vous devez utiliser le WebRTC pour faire de navigateur à navigateur de communication pour le site web
- il est webRTC pour le navigateur à navigateur, pas les websockets
- WS n'est pas mieux, ils sont différents et mieux pour certaines tâches spécifiques. 3) C'est une nouvelle fonctionnalité que les gens doivent être conscients de, et ouvrir de nouvelles possibilités pour le Web
- C'est faux, les Websockets sont un client de la technologie de serveur et de ne pas le P2P.
- ...exactement ce que je pense ...
Vous devez vous connecter pour publier un commentaire.
1) Pourquoi les WebSockets protocole de mieux?
WebSockets est mieux pour les situations qui impliquent un faible temps de latence de communication, notamment pour de faibles temps de latence pour le client vers le serveur de messages. Pour le serveur de données de clients que vous pouvez obtenir assez faible latence à l'aide de la longue-tenue des connexions et des fragments de transfert. Cependant, cela n'aide pas avec le client pour la latence du serveur qui nécessite une nouvelle connexion pour chaque client vers le serveur de messages.
Votre 48 octets HTTP poignée de main n'est pas réaliste dans le monde réel HTTP connexions navigateur où il y a souvent plusieurs kilo-octets de données transmises dans le cadre de la demande (dans les deux sens), y compris de nombreux en-têtes et les données de cookie. Voici un exemple de requête/réponse à l'aide de Chrome:
Exemple de demande (2800 octets, y compris les données des cookies, 490 octets sans les données de cookie):
Exemple de réponse (355 octets):
HTTP et les WebSockets avoir l'équivalent de la taille initiale de la connexion des poignées de main, mais avec une connexion WebSocket la poignée de main initiale est effectuée une seule fois et puis des petits messages seulement 6 octets de surcharge (2 pour l'en-tête et de 4 pour la valeur de masque). Le temps de latence de frais généraux n'est pas tant la taille des en-têtes, mais de la logique pour analyser/gérer/stockage de ces en-têtes. En outre, la connexion TCP configuration du temps de latence est probablement un facteur plus grand que la taille ou le temps de traitement de chaque demande.
2) Pourquoi il a été mis en œuvre au lieu de la mise à jour du protocole HTTP?
Il y a des efforts à re-concevoir le protocole HTTP pour obtenir de meilleures performances et une faible latence comme SPDY, HTTP 2.0 et QUIC. Cela permettra d'améliorer la situation normale pour les requêtes HTTP, mais il est probable que les WebSockets et/ou WebRTC DataChannel auront toujours un temps de latence inférieur pour le client vers le serveur de transfert de données de protocole HTTP (ou il sera utilisé dans un mode qui ressemble beaucoup à WebSockets de toute façon).
Mise à jour:
Ici est un cadre de réflexion sur les protocoles web:
text/event-stream
type MIME. Le navigateur de l'API (qui est assez similaire à l'API WebSocket) est appelé le EventSource API.Références:
Vous semblez supposer que WebSocket est un remplacement pour HTTP. Il n'est pas. C'est une extension.
Les principaux cas d'utilisation des WebSockets sont Javascript applications qui s'exécutent dans le navigateur web et de recevoir des données en temps réel à partir d'un serveur. Les jeux sont un bon exemple.
Avant les WebSockets, la seule méthode pour des applications Javascript pour interagir avec un serveur par le biais de
XmlHttpRequest
. Mais elles ont un inconvénient majeur: Le serveur ne peut pas envoyer de données, sauf si le client a expressément demandé.Mais la nouvelle WebSocket permet au serveur d'envoyer des données à chaque fois qu'il veut. Cela permet de mettre en œuvre basée sur le navigateur de jeux avec beaucoup moins de latence et sans avoir à utiliser laid hacks comme AJAX le long du scrutin ou plug-ins de navigateur.
Alors pourquoi ne pas faire un usage normal l'adresse HTTP en streaming avec les demandes et les réponses
Dans un commentaire à une autre réponse vous a suggéré de juste de flux de la demande du client et le corps de la réponse de manière asynchrone.
En fait, les WebSockets sont essentiellement que. Une tentative d'ouverture d'une connexion WebSocket de la client ressemble à une requête HTTP au premier abord, mais une directive spéciale dans l'en-tête (Mise à jour: websocket) indique au serveur de communiquer dans ce mode asynchrone. Les premiers projets de protocole WebSocket n'étaient pas beaucoup plus que cela et certains serrer la main pour s'assurer que le serveur comprend que le client veut communiquer de manière asynchrone. Mais ensuite il s'est rendu compte que les serveurs proxy serait troublé par ça, parce qu'ils sont utilisés à l'habitude de requête/réponse modèle de HTTP. Un potentiel scénario d'attaque contre les serveurs proxy a été découvert. Pour éviter cela, il était nécessaire de faire WebSocket trafic look à la différence de tout le trafic HTTP. C'est pourquoi le masquage clés ont été introduites dans la version finale du protocole.
Pour le TL;DR, voici 2 cents et une version plus simple pour répondre à vos questions:
WebSockets fournit ces prestations sur HTTP:
WebSocket et le protocole HTTP ont été conçus pour résoudre les différents problèmes, I. E. WebSocket a été conçu pour améliorer la communication bi-directionnelle alors HTTP a été conçu pour être apatride, distribué à l'aide d'une requête/réponse modèle. Autre que le partage de ports pour des raisons d'héritage (pare-feu/proxy pénétration), il n'y a pas beaucoup d'un terrain commun pour les combiner en un seul protocole.
Un REPOS régulier de l'API utilise le HTTP comme protocole sous-jacent pour la communication, qui suit la demande et de la réponse de paradigme, sens de la communication implique le client, lui demandant de certaines données ou de ressources à partir d'un serveur, et le serveur répond en arrière à ce client. Cependant, HTTP est un protocole sans état, de sorte que chaque cycle de requête-réponse sera à la fin d'avoir à répéter l'en-tête et les informations de métadonnées. Ceci entraîne une latence supplémentaire en cas de répété fréquemment de la requête-réponse cycles.
Avec les WebSockets, bien que la communication commence toujours comme une initiale HTTP poignée de main, il est en outre des mises à niveau pour suivre les WebSockets protocole (par exemple, si le serveur et le client sont compatibles avec le protocole que pas toutes les entités de soutien les WebSockets protocole).
Maintenant avec les WebSockets, il est possible d'établir un mode full duplex et connexion persistante entre le client et un serveur. Cela signifie que, contrairement à une demande et une réponse, la connexion reste ouverte tant que l'application est en cours d'exécution (c'est à dire qu'il est persistant), et depuis il est full-duplex, les deux sens de communication simultanée est possible, j'.e maintenant que le serveur est capable d'initier une communication et "push" de certaines données pour le client lorsque de nouvelles données (que le client est intéressé par) devient disponible.
Les WebSockets protocole est dynamique et permet de mettre en oeuvre la publication-souscription (ou d'un Pub/Sub) modèle de messagerie qui est le principal concept utilisé dans les technologies en temps réel où vous êtes en mesure d'obtenir de nouvelles mises à jour sous la forme de serveur push, sans que le client ait besoin de le demander (actualiser la page) à plusieurs reprises. Des exemples de telles applications sont Uber voiture de suivi et de localisation, les Notifications Push, les cours de bourse de la mise à jour en temps réel, le chat, les jeux multijoueurs en ligne et en direct à des outils de collaboration, etc.
Vous pouvez consulter une plongée profonde à l'article sur les Websockets qui explique l'histoire de ce protocole, comment il est venu en ce qu'il est et comment vous pouvez appliquer vous-même.
Voici une vidéo de la présentation que j'ai fait sur les WebSockets et comment ils sont différents de ce que l'utilisation régulière des Api REST: La normalisation et de tirer parti de la croissance exponentielle des données en streaming
Pourquoi les websockets protocole de mieux?
Je ne pense pas que nous pouvons les comparer côte à côte comme qui est mieux. Qui ne sera pas juste de comparaison, simplement parce qu'ils sont en train de résoudre deux problèmes différents. Leurs besoins sont différents. Ce sera comme comparer des pommes à des oranges. Ils sont différents.
HTTP est un protocole de demande–réponse. Le Client (navigateur), il veut quelque chose, le serveur lui donne. Qui est. Si les données client veut, c'est en gros, le serveur peut envoyer des flux de données à vide indésirables problèmes de buffer. Ici exigence principale ou le problème est de savoir comment faire la demande de clients et comment la réponse de la ressources(hybertext) ils demandent. C'est là que HTTP briller.
WebSocket n'est pas un protocole de demande-réponse où seul le client peut demander. C'est un socket(très similaire à TCP socket). Dire une fois que la connexion est ouverte, chaque partie peut envoyer des données jusqu'en soulignant connexion TCP est fermée. C'est comme une prise normale. La seule différence avec les socket TCP est websocket peut être utilisé dans le web. Dans le web, nous avons beaucoup de restriction pour une prise normale. La plupart des pare-feu bloquera autre port que le port 80 et 433 HTTP utilisée. Les procurations et les intermédiaires sont également problématiques.Afin de rendre le protocole plus facile à déployer des infrastructures existantes websocket utiliser HTTP poignée de main à la mise à niveau. Que dire lors de la première connexion au moment de l'est va ouvrir, client envoie la requête HTTP à dire serveur en disant: "ce n'est pas de la requête HTTP, veuillez la mettre à jour protocole websocket".
Une fois que le serveur de comprendre la demande et la mise à niveau de protocole websocket, aucun protocole HTTP applique plus.
Donc, ma réponse est Ni l'un est meilleur que l'autre. Ils sont complètement différents.
Pourquoi il a été mis en œuvre au lieu de la mise à jour du protocole http?
Eh bien, nous pouvons faire tout ce qui est sous le nom de HTTP ainsi. Mais allons-nous? Si elles sont deux choses différentes, je préfère deux noms différents. Donc, ne Hickson et Michael Carter .
Les autres réponses ne semblent pas toucher un point clé ici, et qui vous font aucune mention d'exiger l'appui d'un navigateur web comme client. La plupart des limites de la plaine HTTP ci-dessus sont en supposant que vous serait de travailler avec le navigateur/JS implémentations.
Le protocole HTTP est parfaitement capable de la communication en duplex intégral; il est légal d'avoir un client de faire un POST avec des fragments de codage de transfert, et à un serveur de renvoyer une réponse avec un bloc de codage de corps. Cela permettrait de supprimer l'en-tête de frais généraux pour juste au moment de l'initialisation.
Donc, si vous êtes à la recherche pour est full-duplex, contrôle à la fois le client et le serveur, et ne sont pas intéressées par les framing/caractéristiques des websockets, alors je dirais que HTTP est une approche plus simple avec un temps de latence inférieur/CPU (bien que le temps de latence serait vraiment ne diffèrent en microsecondes ou moins, soit).