Uncaught InvalidStateError : Échec de l'exécution de 'send' sur 'WebSocket' : toujours à l'état CONNECTING
Lorsque ma page se charge, j'essaie d'envoyer send
un message au serveur pour initier une connexion, mais cela ne fonctionne pas. Ce bloc de script est vers le haut de mon fichier :
var connection = new WrapperWS();
connection.ident();
// var autoIdent = window.addEventListener('load', connection.ident(), false);
La plupart du temps, je vois l'erreur dans le titre:
Uncaught InvalidStateError : Échec de l'exécution de 'send' sur 'WebSocket' : toujours à l'état CONNECTING
J'ai donc essayé catch
l'exception, comme vous pouvez le voir ci-dessous, mais maintenant elle ne semble InvalidStateError
pas définie et cela produit un fichier ReferenceError
.
Voici l'objet wrapper pour ma connexion websocket :
// Define WrapperWS
function WrapperWS() {
if ("WebSocket" in window) {
var ws = new WebSocket("ws://server:8000/");
var self = this;
ws.onopen = function () {
console.log("Opening a connection...");
window.identified = false;
};
ws.onclose = function (evt) {
console.log("I'm sorry. Bye!");
};
ws.onmessage = function (evt) {
// handle messages here
};
ws.onerror = function (evt) {
console.log("ERR: " + evt.data);
};
this.write = function () {
if (!window.identified) {
connection.ident();
console.debug("Wasn't identified earlier. It is now.");
}
ws.send(theText.value);
};
this.ident = function () {
var session = "Test";
try {
ws.send(session);
} catch (error) {
if (error instanceof InvalidStateError) {
// possibly still 'CONNECTING'
if (ws.readyState!== 1) {
var waitSend = setInterval(ws.send(session), 1000);
}
}
}
window.identified = true;
theText.value = "Hello!";
say.click();
theText.disabled = false;
};
};
}
Je teste en utilisant Chromium sur Ubuntu.
Solution du problème
Cette erreur est générée car vous envoyez votre message avant que la connexion WebSocket ne soit établie.
Vous pouvez le résoudre en faisant simplement ceci:
conn.onopen = () => conn.send("Message");
Cette fonction onopen attend que votre connexion WebSocket s'établisse avant d'envoyer votre message.
Commentaires
Enregistrer un commentaire