l'obtention de la raison pour laquelle les websockets fermé avec près de code 1006
Je voudrais obtenir la raison websockets fermé, donc je peux montrer le bon message à l'utilisateur.
J'ai
sok.onerror=function (evt)
{//since there is an error, sockets will close so...
sok.onclose=function(e){
console.log("WebSocket Error: " , e);}
Le code est toujours 1006 et la raison en est toujours " ". Mais je tiens à dire différents de clôture des raisons de distance.
Par exemple le système comand ligne donne une erreur de la raison : "vous ne pouvez pas supprimer, car la base de données ne vous laissera pas". Mais sur google Chrome, la console, la raison est encore " ".
Toute autre façon de dire les différents clôture des raisons en dehors?
- Je pense que c'est à cause de la façon dont le serveur est de la manipulation de la connecté / déconnecté des événements. Je ne peux pas dire pour sûr, mais la connexion de clôture doit manipulés correctement sur le serveur également avec code. Essayez de substitution de la construite Sur Connecté /Déconnecté des méthodes sur le serveur et voir. Mon hypothèse seulement, c'est que vous êtes à la fermeture, mais le serveur n'est pas fermer correctement et donc de ne pas relayer la bonne fermé de réponse.
Vous devez vous connecter pour publier un commentaire.
Fermez le Code
1006
est un code qui signifie que la connexion a été fermée anormalement (localement) par le navigateur de mise en œuvre.Si votre navigateur client rapports étroits code
1006
, alors vous devriez être à la recherche à lawebsocket.onerror(evt)
de l'événement pour plus de détails.Cependant, google Chrome rarement rapport d'un code 1006 raisons pour le javascript côté. Cela est probablement dû au client des règles de sécurité dans le WebSocket spec pour éviter d'abuser de websocket. (tels que de l'utiliser pour scanner les ports ouverts sur un serveur de destination, ou pour générer un grand nombre de connexions pour un déni de service (ddos).
Noter que google Chrome est souvent un rapport étroit code
1006
si il y a une erreur au cours de la HTTP Mise à niveau de Websocket (c'est l'étape avant une websocket est techniquement "connecté"). Pour des raisons telles que la mauvaise authentification ou d'autorisation, ou de la mauvaise protocole utiliser (comme la demande d'un sous-protocole, mais le serveur lui-même ne prend pas en charge le même sous-protocole), ou même à une tentative de parler à un emplacement de serveur n'est pas une websocket (comme tenter de se connecter àws://images.google.com/
)Fondamentalement, si vous voyez un proche code
1006
, vous disposez d'un très faible niveau d'erreur avec websocket lui-même (similaires à "Impossible d'Ouvrir le Fichier" ou "Erreur de Socket"), pas vraiment conçus pour l'utilisateur, car il indique un faible niveau de la question avec votre code et la mise en œuvre. Fixer votre faible niveau des questions, et puis quand vous êtes connecté, vous pouvez ensuite inclure plus raisonnable des codes d'erreur. Vous pouvez accomplir cela en termes d'étendue ou la gravité de votre projet. Exemple: info et niveau d'avertissement font partie de la partie de votre projet de protocole spécifique, et ne causent pas la connexion pour mettre fin. Avec graves ou mortelles messages de rapports à l'aide de votre projet de protocole pour transmettre autant de détails que vous voulez, et puis de la fermeture de la connexion en utilisant les capacités limitées de la websocket près de flux.Être conscient que WebSocket fermer les codes sont très strictement définies, et l'expression de motif ou d'un message ne doit pas dépasser 123 caractères (c'est intentionnel, websocket limitation).
Mais tout n'est pas perdu, si vous avez envie de cette information pour des raisons de débogage, le détail de la fermeture, et sa raison sous-jacente est souvent rapporté avec une bonne quantité de détails dans la console javascript de Chrome.
sok.onerror=function (evt) {console.log(evt);}
les détails ne sont pas tellement. Pas même unereason
ou quelque chose. Donc, pas d'options à tous? Je viens de montrer à l'utilisateur,something is wrong, or not connencted?
Pas tellement convivial, ce serait bien si l'utilisateur peut voir "Vous ne pouvez pas supprimer, à cause de la base de données de restrictions". Toutes les options? Mercisok.onclose
au lieu de cela qui déclencheclose event
, il areason
etcode
en ellesok.onclose
de travail pour de nombreux chemins, mais pas tous les chemins. Particulièrement mauvais protocole, mauvais poignée de main erreurs (comme certaines conditions qui pourraient causer à proximité de code1006
). Ce changement dans l'avenir? Probablement. Mais quand cette réponse a été écrit, il est vrai.reason
est revenu quand il a utiliséonerror
j'étais en soulignant que cette propriétéscode
&reason
spécifiques àclose
événement à ne paserror
événement. de sorte qu'il serait mieux lui pour utiliseronclose
au lieu de cela, ai-je raté quelque chose?1006
qui a une signification spéciale, et un traitement spécial dans le websocket spec, et javascript api websocket. La chaîne de raison/message sous certaines1006
conditions sont spécifiquement et volontairement exposés n'importe où dans l'API. (comme la réponse souligné). Ce n'est pas un bug dans l'API, de son de ne s'occuper que les différentes spécifications et de leurs préoccupations autour d'abuser de websocket pour les non-websocket fins.Il semble comme c'est le cas lorsque google Chrome n'est pas compatible avec WebSocket standard.
Lorsque le serveur initie à proximité et l'envoie à proximité de cadre à un client, Chrome estime que c'est une erreur et le signale à la JS côté avec le code 1006 et aucune raison de message.
Dans mes tests, google Chrome ne répond jamais à initiées par le serveur fermer les cadres (à proximité de code 1000) ce qui suggère que le code 1006 signifie probablement que Chrome est de déclarer sa propre erreur interne.
P. S. Firefox v57.00 gère ce cas correctement et avec succès offre serveur raisons du message JS côté.