108 votes

api websocket pour remplacer l'api rest?

J'ai une application dont la fonction principale fonctionne en temps réel, à travers les websockets ou d'interrogation. Cependant, la plupart du site est écrite dans un cadre Reposant de la mode, ce qui est agréable pour les applications et d'autres clients dans l'avenir. Cependant, je suis en train de réfléchir à une transition vers un api websocket pour toutes les fonctions du site, loin de se reposer. Cela rendrait plus facile pour moi d'intégrer en temps réel des caractéristiques dans toutes les parties du site. Serait-ce le rendre plus difficile à concevoir des applications mobiles ou des clients?

Merci.

Edit: trouvé que certaines personnes sont déjà en train de faire des choses comme ceci: https://github.com/socketstream/socketstream

104voto

Tauren Points 9324

De ne pas dire que les autres réponses ici n'ont pas de mérite, ils font quelque chose de bon. Mais je vais aller à l'encontre du consensus général et d'accord avec vous que les websockets pour plus que juste des fonctionnalités en temps réel est très attrayant.

Je songe sérieusement à déménager mes application à partir d'une architecture RESTful pour plus d'un type RPC via les websockets. Ce n'est pas un "jouet app", et je ne parle pas seulement en temps réel, donc j'ai des réserves. Mais je vois beaucoup d'avantages à aller dans cette voie, et pensent qu'il pourrait s'avérer être une solution exceptionnelle.

Mon plan est d'utiliser DNode, SocketIO, et l' épine Dorsale. Avec ces outils, ma colonne vertébrale modèles et collections peuvent être passés de/pour le client et le serveur en appelant simplement une des fonctions de style RPC. Pas plus gestion des temps de REPOS des points de terminaison, la sérialisation/désérialisation des objets, et ainsi de suite. Je n'ai pas travaillé avec socketstream encore, mais il semble utile de vérifier.

J'ai encore un long chemin à parcourir avant que je peux définitivement dire que c'est une bonne solution, et je suis sûr que ce n'est pas la meilleure solution pour chaque application, mais je suis convaincu que cette combinaison serait exceptionnellement puissant. J'avoue qu'il y a quelques inconvénients, tels que la perte de la possibilité de mettre en cache des ressources. Mais j'ai le sentiment que les avantages l'emportent sur eux.

Je serais intéressé par la suite de votre progrès à explorer ce type de solution. Si vous avez des github expériences, merci de me pointer chez eux. Je n'ai pas encore, mais j'espère à bientôt.

Ci-dessous une liste de lecture plus tard, les liens que j'ai recueilli. Je ne peux pas garantir qu'ils sont tous la peine, comme je l'ai seulement écrémé beaucoup d'entre eux. Mais j'espère que certains vont l'aider.


Tutoriel sur l'utilisation de Socket.IO Express. Il expose express séances de prise.io et explique comment avoir des chambres séparées pour chaque utilisateur authentifié.

Tutoriel sur le nœud.js/socket.io/ossature.js/express/se connecter/jade/redis avec authentification, Joyent hébergement, etc:

Tutoriel sur l'utilisation de Poussoir Backbone.js (à l'aide de Rails):

Construire des applications avec backbone.js sur le client et node.js avec express, prise.io, dnode sur le serveur.

À l'aide de colonne vertébrale avec DNode:

61voto

Jonas Points 22309

HTTP REPOS et les WebSockets sont très différents. HTTP est apatride, de sorte que le serveur web n'a pas besoin de connaître quoi que ce soit, et vous obtenez la mise en cache dans le navigateur web et les procurations. Si vous utilisez les WebSockets, votre serveur est en train de devenir dynamique et vous avez besoin d'avoir une connexion au client sur le serveur.

Demande-Réponse de la communication vs Push

Utiliser les WebSockets seulement si vous avez besoin de POUSSER les données du serveur vers le client, que le mode de communication n'est pas inclus dans le protocole HTTP (uniquement par des solutions de contournement). PUSH est utile si les événements créés par d'autres clients doit être disponible pour d'autres clients connectés par exemple, dans les jeux où les utilisateurs devraient agir sur d'autres clients comportement. Ou si votre site web est suivi de quelque chose, où le serveur pousse des données pour le client de tous les temps, par exemple, les marchés boursiers (en direct).

Si vous n'avez pas besoin d'envoyer des données à partir du serveur, il est généralement esier à l'utilisation d'un apatride HTTP REPOS serveur. HTTP utilise une simple Requête-Réponse communictaion modèle.

11voto

Raynos Points 82706

Le seul problème que je peux à l'aide de TCP (WebSockets) que votre contenu web principal de livraison de la stratégie est qu'il y a très peu de lecture de documents sur la façon de concevoir votre site web de l'architecture et de l'infrastructure à l'aide de TCP.

Si vous ne pouvez pas apprendre des erreurs des autres femmes et le développement est plus lente. C'est pas non plus un "essayé et testé" la stratégie.

Bien sûr, votre aussi va perdre tous les avantages de HTTP (apatrides, et la mise en cache sont les plus gros avantages).

Rappelez-vous que HTTP est une abstraction pour TCP conçu pour les services de contenu web.

Et n'oublions pas que le RÉFÉRENCEMENT et les moteurs de recherche ne font pas les websockets. Ainsi, vous pouvez oublier sur le RÉFÉRENCEMENT.

Personnellement, je déconseille ce qu'il y a trop de risque.

N'utilisez pas de WS pour servir de sites web, de l'utiliser pour servir des applications web

Toutefois, si vous avez un jouet ou un site web par tous les moyens d'aller pour elle. Essayez-la, être d'avant-garde. Pour une entreprise ou une société, vous ne pouvez pas justifier le risque de le faire.

1voto

yojimbo87 Points 27744

Les WebSockets (ou d'interrogation) les transports surtout pour les (quasi) la communication en temps réel entre le serveur et le client. Bien qu'il existe de nombreux scénarios où ces types de transports sont nécessaires, comme le chat ou une sorte de temps réel de flux ou d'autres choses, pas toutes les parties de certaines applications web doivent être nécessairement connecté de façon bidirectionnelle avec le serveur.

RESTE provient des ressources de l'architecture qui est bien compris et vous propose des avantages sur les autres architectures. Les WebSockets incline plus à des flux/flux de données en temps réel, ce qui vous obligerait à créer une sorte de serveur de base de la logique, afin de hiérarchiser ou de différencier entre les ressources et les aliments pour animaux (dans le cas où vous ne souhaitez pas utiliser le RESTE).

Je suppose que, finalement, il n'y aurait plus WebSockets centrée sur les cadres comme socketstream dans l'avenir, lorsque ce transport serait plus répandu et le mieux compris et documentés sous la forme de données de type/forme agnostique de livraison. Cependant, je pense, cela ne signifie pas qu'il/doit remplacer le RESTE simplement parce qu'il offre des fonctionnalités qui n'est pas forcément nécessaire dans de nombreux cas d'utilisation et scénarios.

-1voto

zeekay Points 22640

Ce n'est pas une bonne idée. La norme n'est même pas finalisé encore, le soutien varie selon les navigateurs, etc. Si vous voulez faire cela, vous allez maintenant devoir de secours de flash ou d'interrogation, etc. Dans l'avenir, il est probablement encore ne fera pas beaucoup de sens, étant donné que le serveur doit prendre en charge les laissant ouvertes les connexions pour chaque utilisateur. La plupart des serveurs web sont conçus au lieu d'excel à répondre rapidement aux demandes et de les fermer dès que possible. Heck, même votre système d'exploitation devrait être à l'écoute de traiter avec un grand nombre de connexions simultanées (chaque connexion à l'aide de plus de ports éphémères et de la mémoire). Tenir à l'utilisation de RESTE pour autant de site que vous le pouvez.

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