Uncaught InvalidStateError : Échec de l'exécution de 'send' sur 'WebSocket' : toujours à l'état CONNECTING

Lorsque ma page se charge, j'essaie d'envoyer sendun 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é catchl'exception, comme vous pouvez le voir ci-dessous, mais maintenant elle ne semble InvalidStateErrorpas 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

Posts les plus consultés de ce blog

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables