Les Websockets. La perte d'internet, des messages keep-alive, application architecture, etc
Bien, il y a un certain nombre d'informations sur les websockets. La technologie elle-même est incroyable, il n'y a aucun doute à ce fait. Et avant que je commence à l'utiliser dans mon application, je veux juste la communauté pour répondre à ces questions:
"...afin de maintenir la présence, l'application peut envoyer des messages keep-alive sur le WebSocket pour l'empêcher d'être fermée en raison d'un délai d'inactivité..."
"...idéalement une future version de WebSocket soutiendra délai d'attente de la découverte, de sorte qu'il peut indiquer à l'application de la période de messages keep-alive..."
-
C'est comme du deja vu. Précédemment, nous avons dû interroger le serveur une fois qu'un %period_time% pour obtenir la nécessaire mise à jour de l'information. Avec les websockets, nous avons à interroger le serveur websocket une fois un %period_time% avec messages keep-alive assurez-vous que la connexion internet est toujours en vie /le serveur websocket est encore à travailler. Quel est le bénéfice?
Et une autre chose au sujet de ces messages keep-alive. Protocole Websocket a l'avantage d'utiliser moins de trafic que HTTP(S). Si nous envoyons des messages keep-alive, il semble que le trafic avantage disparaît. Ou peut-être pas?
-
Comment dois-je gérer la la perte d'internet dans mon application si-je utiliser les websockets? Je veux dire que la situation réelle au moment de la connexion internet est soudainement perdu (je ne veux pas de "navigator.hors ligne" de l'événement qui s'est passé). Dois-je utiliser une sorte de setTimeout-fonction pour rechercher des messages keep-alive ou est-il une meilleure façon de gérer cette situation?
-
RESTE nous donne une compréhension claire de la façon dont une application devrait fonctionner et comment les demandes devrait ressembler. Quelle est la meilleure façon de le faire en websocket-alimenté apps? Dois-je juste (dire) JSON des messages codés avec la demande.champ d'action il? Et comment l'application d'effectuer des MISES-demandes? Il y a des URL des ressources en RESTE modèle pour gérer cela, alors je devrais utiliser la combinaison de ces approches ou peut-être est-il qch de plus simple?
- Cette question n'est pas un bon ajustement pour notre Q&Un format. Nous attendons des réponses aux impliquent généralement des faits, des références, ou une expertise spécifique; cette question sera susceptible de solliciter les avis, les débats, les arguments, les bureaux de vote, ou de longues discussions.
- je pensais que stackoverflow est la meilleure façon d'obtenir des réponses au sujet de cette technologie. Je veux juste écouter les gens qui connaissent les réponses à ces questions. En fait, pas de débat.
Vous devez vous connecter pour publier un commentaire.
Je pense que la plupart de vos questions peuvent être clarifiées par comprendre le but réel des WebSockets. Les WebSockets, n'était pas conçu pour remplacer l'un quelconque des choses qui sont déjà en place et fonctionne bien. Par exemple, il n'a pas été conçu pour être une faible surcharge version de l'AJAX. L'objectif est de fournir une bidirectionnel, une faible latence, full duplex, le canal de communication entre le navigateur et le serveur. C'est un vrai but est de permettre à un nouveau domaine d'applications web ou d'améliorer ceux qui abusent de HTTP pour obtenir le mode de communication bidirectionnelle.
Avec cela à l'esprit, laissez-moi un commentaire sur vos points de balle:
Le but de périodique WebSockets de ping/pong messages est double: garder le canal à partir de la fermeture par timeout TCP et plus rapidement détecter lorsque le canal est fermé (ce qui est historiquement une faiblesse du protocole TCP). Le but de HTTP/AJAX d'interrogation est de contourner le fait que le HTTP n'est pas bidirectionnelle (par exemple, le client urnes pour donner le serveur de l'occasion pour envoyer des données à l'arrière). WebSocket de ping/pong, les cadres sont généralement de 2 octets de long. HTTP/AJAX d'interrogation nécessite complète des en-têtes, les cookies, etc, qui peuvent facilement total de plus d'un kilo-octet pour chaque requête/réponse. Même si vous envoyez une requête ping/pong 10 fois par seconde sur les WebSockets vous sont encore peu probable même de les comparer à la surcharge de HTTP/AJAX de vote toutes les 2 secondes. Toutefois, notez que les applications n'ont pas la possibilité d'envoyer un ping/pong messages. C'est entre le navigateur et le serveur.
Si vous perdez la connexion Internet, vous recevrez un événement onclose. Si votre navigateur n'est pas faire de ping/pong messages pour vous, alors vous ne pouvez pas recevoir une onclose, jusqu'à ce que vous essayez d'envoyer un message après la connexion réseau va vers le bas.
Je ne remplace pas un travail de service RESTful avec les WebSockets. Vous serait faire beaucoup de travail de cartographie pour probablement que très peu d'intérêt (encore une fois, les WebSockets n'est pas conçu pour remplacer ce qui fonctionne déjà bien). Je peux envisager des situations où vous pourriez avoir une combinaison des deux: le RESTE pour le transfert de l'état, les WebSockets pour la notification d'événement. E. g. le serveur envoie un message WebSocket indiquant que "quelque chose a changé", ce qui déclenche le client pour faire une demande RESTE à trouver le changement.
Mise à jour:
Précision: vous pourriez faire REPOSER sur les WebSockets, mais c'est un déséquilibre dans la philosophie. REST est un style d'architecture qui est non-opinions sur les sous-jacents au système de transport. C'est une contrainte de l'architecture: "client-serveur", "apatrides", "cachable", "système de couches", "code à la demande", et "interface uniforme". Les WebSockets est contraint par aucun de ceux-ci; c'est un message générique du système de transport. Vous pourrait contraindre les WebSockets pour être paisible, mais ne pas le faire jusqu'à ce que vous comprendre à la fois le REPOS et les WebSockets intimement et peut identifier quand il est juste de le faire.
"S'il vous plaît arrêtez de dire des mots communs et de dire combien de vrais cas pratiques d'utiliser les websockets en prêt à la production de apps savez-vous, sauf les chats et stock exchange apps?"
J'ai utilisé les websockets pour la prise en charge multijoueur en un vaisseau spatial, jeu d'action. Les Websockets est une technologie vraiment cool, mais je trouve aussi très imprévisible - ce qui est probablement juste moi qui suis un novice, et de faire des erreurs. Si j'avais eu plus de bugs travaillé je pourrais avoir mis un lien, mais il bloque trop, donc je n'ai pas ça sur un serveur en ligne pour le moment.
Je suppose, qui serait considérée comme un NON-prêt à la production de l'app, mais en théorie je ne vois pas pourquoi quelqu'un d'autre avec plus d'expérience n'aurait pas déjà fait, c'est bien.