Comment WebSocket compresse-t-il les messages?
JSON.stringify est évidemment pas très efficace de l'espace. Par exemple, [123456789,123456789] occupent+ de 20 octets alors qu'il pourrait juste besoin d'environ 5. Ne websocket compresser ses JSONs avant de l'envoyer à flot?
source d'informationauteur MaiaVictor
Vous devez vous connecter pour publier un commentaire.
WebSocket est, en son cœur, juste un ensemble de cadrage du TEXTE ou des données BINAIRES.
Il n'effectue aucune compression sur son propre.
Cependant, le WebSocket spec permet pour les Extensions, et il ya eu une variété de la compression des extensions dans la nature (la officialisé les spécifications de ceux-ci sont encore en cours de finalisation).
Une telle compression que vous voyez dans la nature comme d'aujourd'hui (Oct 10, 2013) doit être considéré comme expérimental non-final draft versions de cette fonctionnalité, et sont sujettes à modification jusqu'à ce que la spécification est finalisé.
Certaines des extensions vu à l'état sauvage:
x-webkit-deflate-frame
- l'un des premiers a proposé de compression qui compresse chaque raw websocket bloc de données. Vu dans l'utilisation par google Chrome et Safari.perframe-deflate
- une version renommée de la au-dessus de la compression. Vu dans l'utilisation par les différentes implémentations de serveur websocket, et aussi brièvement apparu dans divers clients basé sur WebKit.permessage-deflate
- le nom de l'officialisation de spec pour l'utilisation de dégonfler pour compresser les messages dans leur intégralité, quel que soit le nombre de websocket images.De la note, le
permessage-deflate
extension est le premier d'une ligne de PMCE (Par Message Compression Extensions) qui finira par inclure d'autres systèmes de compression (ceux en cours de discussion sontpermessage-bzip2
permessage-lz4
etpermessage-snappy
)La réponse courte est: parfois, mais vous ne pouvez pas dépendre.
Comme l'indique très justement par Joakim Erdfelt, Websocket support des connexions à la fois du Texte et de messages Binaires.
JSON est juste un moyen de transport de données, avec l'avantage de la polyvalence et de facilité d'utilisation (tout en étant un gaspillage autant que l'espace est concerné).
Vous pouvez facilement transférer des données binaires à l'aide de l'API Websocket, éliminer la surcharge de la bande passante au détriment d'autres préoccupations (comme endieness, la longueur de mot, d'analyse, etc").
De nombreux navigateurs également en charge Websocket message de compression qui est une extension du protocole Websocket (bien que le serveur ne prend pas en charge l'extension).
Extensions sont négociés à l'aide de la
Sec-WebSocket-Extensions
en-tête HTTP. Les négociations sont généralement mises en œuvre par le client /serveur sans offrir une API publique pour les contrôler.Droit jusqu'en 2015, il y avait un certain nombre d'approches et implémentations dans la nature, mais depuis le mois de décembre 2015 RFC 7692 est le seul concurrent sérieux pour le message de compression et les choses sont beaucoup plus claires.
RFC 7692 compresse tout le message avant de l'emballer (et peut-être fragmentation) dans Websocket "paquets", le rendant plus facile à mettre en œuvre que quelques précédents schémas de compression.
Le projet actuel propose un
permessage-foo
de négociation de compression de régime (oùfoo
demandé /pris en charge la compression).Je l'ai seulement connu la
permessage-deflate
extension de moi-même.Faire remarquer que l'extension des négociations sont facultatifce qui signifie que le potentiel de clients du réseau sont généralement autorisés à négocier des connexions sans compression, même si votre serveur prend en charge l'extension.
En outre, RFC 7692 prend en charge la compression sélective, sens certains messages peuvent être compressés, tandis que d'autres ne sont pas compressés...
... par exemple,
[123456789,123456789]
peut être envoyé en est, puisque c'est la longueur indique qu'il n'est probablement pas la peine de l'effort de compression.Soutien pour
permessage-deflate
(RFC 7692), le 8 août 2017:C'est une combinaison de l'information dans les commentaires, dernière mise à jour le 8 août 2017.
Si j'ai oublié quelque chose, de les ajouter ici et de mettre à jour la date.
Connus Du Navigateur
x-webkit-deflate-frame
)Connu En Charge De Serveur
Websockets envoyer des octets brutes.
Ils ne savent pas ou de soins de ce que ces octets représentent.
Si vous souhaitez compresser les données, vous aurez besoin de les compresser avant de les envoyer sur le réseau.
Noter que google Chrome est compatible avec gzip pour les websocket connexions. (en supposant que votre serveur ne)