Quel est l'inconvénient d'utiliser websocket/socket.où est ajax?

des questions similaires ont déjà été posées et elles ont toutes abouti à la conclusion que L'AJAX ne deviendra pas obsolète. Mais en quoi ajax est-il meilleur que websockets?

avec douille.io, il est facile de revenir à flash ou long sondage, donc la compatibilité du navigateur semble être un non-problème.

Les sites Web

sont bidirectionnels. Là où ajax ferait une requête asynchrone, le client websocket enverrait un message au serveur. The POST / GET les paramètres peuvent être encodés dans JSON.

alors qu'est-ce qui ne va pas avec l'utilisation de 100% websockets? Si chaque visiteur maintient une connexion WebSocket persistante au serveur, est-ce que ce serait plus gaspiller que de faire quelques requêtes ajax tout au long de la session de visite?

43
demandé sur oCpmture 2011-01-31 10:45:50

8 réponses

je pense que ce serait plus inutile. Pour chaque client connecté vous besoin d'une sorte de l'objet/fonction/code/quoi que ce soit sur le serveur jumelé avec un client. Une prise de gestionnaire, ou un descripteur de fichier, ou si votre serveur est configuré pour gérer les connexions.

avec AJAX vous n'avez pas besoin d'une mise en correspondance 1:1 de la ressource côté serveur au client. Votre nombre de clients peut être moins fiable que vos ressources côté serveur. Même nœud.js a ses limites à comment il peut supporter et garder ouvertes de nombreuses connexions.

l'autre chose à considérer est que certaines réponses AJAX peuvent être mises en cache aussi. À mesure que vous mettez à l'échelle, vous pouvez ajouter un cache HTTP pour aider à réduire la charge des requêtes AJAX fréquentes.

30
répondu futuremint 2011-01-31 18:48:50

Réponse Courte

Garder un websocket actif a un coût, tant pour le client que pour le serveur, si Ajax n'aura un coût qu'une seule fois, selon ce que vous en faites.

Longue Réponse

Websockets sont souvent mal compris en raison de ce tout " Hé, utilisez Ajax, qui fera l'affaire !". Non, les Websockets ne remplacent pas Ajax. Elles peuvent être appliquées à: les mêmes champs, mais il y a des cas où l'utilisation Websocket est absurde.

prenons un exemple simple : une page dynamique qui charge des données après la page est chargée du côté du client. C'est simple, faites un appel Ajax. Nous n'avons besoin que d'une seule direction, du serveur au client. Le client demandera ces données, le serveur les enverra au client, terminé. Pourquoi mettre en œuvre websockets pour une telle tâche ? Vous n'avez pas besoin que votre connexion soit ouverte tout le temps, vous n'avez pas besoin le client pour demander constamment le serveur, vous n'avez pas besoin de serveur pour informer le client. La connexion restera ouverte, cela gaspillera des ressources, parce que pour garder une connexion ouverte, vous devez constamment la vérifier.

maintenant pour une application de chat les choses sont totalement différentes. Vous avez besoin que votre client soit notifié par le serveur au lieu de forcer le client à demander au serveur toutes les X secondes ou millisecondes si quelque chose est nouveau. Il n'aurait aucun sens.

pour mieux comprendre, voyez cela comme deux personnes. L'un des deux est le serveur le plus est le client. Ajax, c'est comme envoyer une lettre. Le client envoie une lettre, le serveur répond avec une autre lettre. Le fait est que, pour une application de chat la conversation serait comme cela:

"Serveur, tu as quelque chose pour moi ?

- Aucun.

- Hé Serveur, vous avez quelque chose pour moi ?

- Aucun.

- Hé Serveur, vous avez quelque chose pour moi ?

- Oui, il est ici."

Le serveur ne peut pas envoyer une lettre au client, si le client n'a jamais demandé une réponse. C'est un énorme gaspillage de ressources. Parce que pour chaque requête Ajax, même si elle est mise en cache, vous devez faire une opération du côté du serveur.

maintenant le cas que j'ai discuté plus tôt avec les données chargées avec Ajax. Imaginez le client est au téléphone avec le serveur. Maintenir la connexion active a un coût. Cela coûte de l'électricité et vous devez payer votre opérateur. Maintenant, pourquoi avez-vous besoin d'appeler quelqu'un et de le garder au téléphone pendant une heure, si vous voulez juste que cette personne vous dise 3 mots ? Envoie une putain de lettre.

en conclusion, les Websockets ne remplacent pas totalement Ajax !

Parfois, vous aurez besoin Ajax où L'utilisation de Websocket est absurde.

Edit : L'ESS cas

Cette technologie n'est pas très utilisée, mais elle peut être utile. Comme son nom l'indique, les événements envoyés par le serveur sont une poussée à Sens Unique du serveur vers le client. Le client ne demande rien, le serveur envoie juste les données.

en bref:

- Unidirectionnel du client : Ajax

- Unidirectionnel à partir du serveur : ESS

- Bidirectionnel: Websockets

20
répondu Depado 2016-12-20 09:24:18

personnellement, je pense que les websockets seront de plus en plus utilisés dans les applications web au lieu D'AJAX. Ils ne sont pas bien adaptés à sites web où la mise en cache et le référencement sont plus préoccupants, mais ils feront des merveilles pour webapps.

Les projets

tels que DNode et socketstream aident à éliminer la complexité et permettent un codage simple de type RPC. Cela signifie que votre code client appelle juste une fonction sur le serveur, en passant n'importe quelles données à cette fonction il veut. Et le serveur peut appeler une fonction sur le client et transmettre des données. Vous n'avez pas besoin de vous soucier des détails de TCP.

en outre, il ya beaucoup de frais généraux avec des appels AJAX. Par exemple, une connexion doit être établie et des en-têtes HTTP (cookies, etc.) sont transmis avec chaque demande. Websockets éliminent beaucoup de cela. Certains disent que les sites Web sont plus gaspilleurs, et peut-être ont-ils raison. Mais je ne suis pas convaincu que l' la différence est vraiment importante.

j'ai répondu à une autre question connexe en détail, y compris de nombreux liens vers des ressources connexes. Vous pouvez vérifier:

api websocket pour remplacer l'api rest?

18
répondu Tauren 2017-05-23 11:46:55

je pense que tôt ou tard les cadres basés sur websocket commenceront à apparaître non seulement pour écrire le chat en temps réel comme des parties des applications web, mais aussi comme cadres web autonomes. Une fois que la connexion permanente est créée, elle peut être utilisée pour recevoir toutes sortes de choses, y compris les parties UI de l'application web qui sont maintenant servies par exemple par des requêtes AJAX. Cette approche peut nuire au RÉFÉRENCEMENT d'une certaine façon même si elle peut réduire la quantité de trafic généré par les requêtes asynchrones qui inclut les en-têtes HTTP redondants.

cependant je doute que les websockets vont remplacer ou mettre en danger AJAX car il existe de nombreux scénarios où les connexions permanentes sont inutiles ou indésirables. Par exemple, les applications mashup qui utilisent (une fois) des services basés sur le repos à usage unique qui n'ont pas besoin d'être connectés en permanence avec les clients.

6
répondu yojimbo87 2011-01-31 14:11:05

il n'y a rien de" mal " à ce sujet.

La seule différence est surtout la lisibilité. Le principal avantage D'Ajax est qu'il vous permet le développement rapide parce que la plupart des fonctionnalités sont écrites pour vous.

il y a un grand avantage à ne pas avoir à réinventer la roue chaque fois que vous voulez ouvrir une prise.

4
répondu Yochai Timmer 2011-01-31 08:02:46

WS: / / les connexions ont beaucoup moins de frais généraux que les requêtes "AJAX".

2
répondu BingeBoy 2013-06-07 04:49:15

comme d'autres personnes l'ont dit, garder la connexion ouverte peut être exagéré dans certains scénarios où vous n'avez pas besoin de notifications de serveur à client, ou la demande de client à serveur se produit avec une faible fréquence.

mais un autre inconvénient est que websockets est un protocole de bas niveau, ne pas offrir des fonctionnalités supplémentaires à TCP une fois la poignée de main initiale est effectuée. Ainsi, lors de la mise en œuvre d'un paradigme de requête-réponse sur les websockets, vous manquerez probablement les fonctionnalités que HTTP (une famille de protocoles très mature et extense) offre , comme la mise en cache (les caches client et partagés), la validation (les requêtes conditionnelles), la sécurité et l'importance de l'ID (avec des implications sur le comportement de l'agent), les demandes de portée, les types de contenu, les codes d'état, ...

C'est-à-dire, vous réduisez la taille des messages à un coût.

donc mon choix est AJAX pour la requête-réponse, les websockets pour la poussée du serveur et la messagerie de basse latence de haute fréquence

1
répondu idelvall 2016-02-15 12:21:47

si vous voulez que la connexion au serveur soit ouverte et si le sondage continu vers le serveur sera là alors allez pour les sockets sinon vous êtes bon pour aller avec ajax.

Simple Analogie : Ajax pose des questions(requêtes) au serveur et server donne des réponses (réponses) à ces questions. Maintenant, si vous voulez poser des questions en continu, puis ajax ne fonctionne pas, il a un grand frais généraux qui exigera des ressources aux deux extrémités.

1
répondu Vishvajit Pathak 2016-03-16 09:44:32