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

Comment signer la connexion OKEx API version 5 avec websockets ?

Comment obtenir des éléments communs dans une liste imbriquée profonde : mes deux solutions fonctionnent mais prennent du temps

Catalogue Spark avec AWS Glue : base de données introuvable