10
votes

Réutiliser des webockets entre les pages?

Y a-t-il un moyen d'ouvrir une bande Web sur une page, puis de la réutiliser sur une autre page (dans le même onglet, après que l'utilisateur clique sur un lien, par exemple) plutôt que d'ouvrir une nouvelle bande Web après chaque charge de page ? Le stockage de navigateur est-il capable de maintenir une prise ouverte?

L'objectif est de pouvoir garder à une bande Web par utilisateur (ou par onglet) et il serait formidable de le faire sans avoir à passer entre les pages de manière non traditionnelle, par exemple en chargement de contenu dans une DIV à l'aide de JavasCrpt. Chaque fois que l'utilisateur interagit avec la page.


6 commentaires

Lorsqu'une connexion WebSocket est créée, un état existe que les deux côtés de la connexion doivent garder une trace de la connexion à la connexion. Je penserais que si vous avez stocké l'état secondaire du client d'une connexion en stockage local (notez que le côté client du système WebSocket doit être modifié pour permettre à ce que cela soit le plus ou même tous les clients Websocket ne le soutiennent pas aussi loin que je sache ), vous pourrez peut-être rouvrir la dernière connexion ou même sur une autre page (tant que le serveur n'a pas laissé tomber sa moitié de l'état). Donc, il doit être possible mais comment? J'aimerais voir un échantillon de travail.


J'imagine que "recréer" la bande Web comme si le serveur devrait également le supporter. Ou plus particulièrement la bibliothèque utilisée pour implémenter une prise en charge de Websocket sur le serveur. Je soupçonne que la plupart des implémentations sur le serveur seraient enfermées sur le Websocket lorsqu'il détectée la connexion TCP sous-jacente a été fermée - bien que les modifications apportées au client suggèrent pourraient le garder.


Yup, Une connexion WebSocket n'allume pas la connexion TCP créée comme transport , bien, je pensais qu'ils étaient plus intelligents.


Dupliqué possible de Les travailleurs Web partagés persistent Sur une seule page rechargée, lien Navigation


@kanaka, non ce n'est pas le cas. Ceci concerne les webkets et votre lien concerne les travailleurs Web qui sont deux technologies distinctes.


@Jlafay, les titres de la question sont différents, mais ils sont après la même réponse: être capable de conserver une connexion WebSocket ouverte même lorsque la page change.


3 Réponses :


2
votes

Les travailleurs Web partagés vous permettraient de partager des connexions WebSocket pour plusieurs onglets chargés de la même origine / site.

Les travailleurs Web partagés ne sont actuellement pris en charge que sur chrome, safari, opéra .


3 commentaires

Désolé, ma question n'était pas assez claire. Lorsque j'ai dit différentes pages, j'aurais dû spécifier dans le même onglet. J'ai édité ma question pour que j'espère que cela soit plus clair. Merci d'avoir passé, cependant.


@Joshua: Ah, alors vous demandez la même chose que je me posais un peu de temps: Stackoverflow.com/questions/9336774/... Il n'y a pas de réponse définitive à cette Un soit, j'ai l'intention de tester à un moment donné pour voir si cela fonctionne à Chrome / Safari.


Oui, les questions sont similaires autres que j'espérais qu'il y avait peut-être quelque chose de différent sur les webockets qui signifiaient que je pourrais avoir une réponse différente.



8
votes

La réponse est non .

même si la prise n'est pas explicitement fermée en appelant mysocket.close (); , la prise sera fermée par le navigateur sur Recharge.

J'ai essayé de stocker l'objet de prise Web dans le stockage local et de l'utiliser pour récupérer à nouveau des données. L'objet renvoyé est valide, mais la connexion n'est plus là. Parce que, lorsque la page recharge de la page, la prise est non contractée.

message au côté serveur dit: xxx

là, vous allez ...


1 commentaires

J'étais curieux de savoir ce qui se passerait si vous mettez une bande Web (ou une référence) en stockage local. Merci d'avoir essayé et de résoudre le mystère.



7
votes

une approche différente serait de conserver l'utilisateur au lieu de la prise dans différentes pages. Par là, je veux dire que vous stockez l'ID du client dans un cookie avec JavaScript, chaque fois que l'utilisateur tente d'ouvrir une nouvelle prise à partir de l'une des pages de votre site Web, vous envoyez cet ID sur le serveur, puis le serveur a un moyen de savoir que cela Une nouvelle connexion provient du même utilisateur.

J'ai fait cela dans un projet récent et cela fonctionne parfaitement :) Selon ce que vous envisagez de le faire, vous pouvez conserver l'état de l'utilisateur sur votre serveur avec son identifiant ou le stocker dans un autre cookie, ou événement Utilisez Flash pour le stocker dans un objet partagé!


2 commentaires

Oui, c'est tout à fait possible et aurait été une solution parfaitement valide (et une autre que nous avons discutée), mais l'architecture sous-jacente s'est appuyée sur la bande Web restante ouverte afin de répondre à certaines des exigences fonctionnelles. Bien sûr, les problèmes qui auraient été causés par l'ouverture et la fermeture des prises de fermeture auraient pu être atténués, mais il a finalement été décidé de maintenir le contenu de la prise et de charger de manière dynamique en fonction de la propriété de localisation de l'URL. Pas sûr que ce soit la meilleure façon, mais c'est plus la vie.


@Wimantis Quel directeur de connexion pour Websocket utilisez-vous au serveur?