Comment attendre un WebSocket readyState pour changer

Je suis en train de mettre en œuvre un WebSocket avec un repli à une interrogation. Si la connexion WebSocket réussit, readyState devient 1, mais si elle échoue, readyState est de 3, et je commence à interroger.

J'ai essayé quelque chose comme ceci:

var socket = new WebSocket(url);
socket.onmessage = onmsg;
while (socket.readyState == 0)
{
}
if (socket.readyState != 1)
{
    //fall back to polling
    setInterval(poll, interval);
}

Je m'attendais à socket.readyState de mettre à jour de manière asynchrone, et permettez-moi de le lire immédiatement. Cependant, lorsque je l'exécute, mon navigateur se bloque (je l'ai laissé ouvert pendant environ une demi-minute avant d'abandonner).

J'ai pensé que peut-être il y avait un onreadyStateChanged événement, mais je n'ai pas vu un seul dans le MDN référence.

Comment dois-je être mise en œuvre? Apparemment vide, la boucle ne fonctionne pas, et il n'y a aucun événement pour ce.

  • Hum... je suis peut-être raté quelque chose, mais pourquoi n'utilisez-vous pas socket.onopen?
  • Je ne pense pas que socket.onopen se déclenche si la prise n'est jamais ouvert.
  • Oui, mais que votre code faire dans ce cas? "D'attente pour socket ouvert" n'est évidemment pas une réponse, je suppose. )
  • Il devrait revenir à l'interrogation si la prise ne s'ouvre pas.
  • Je suis encore un peu perdu, désolé, mais quel est le problème avec l'aide de onerror gestionnaire d'événement pour cela?
  • Ne onerror feu dans ce cas, lorsque readyState va de 0 à 3 immédiatement?
  • Je pense que vous êtes à la recherche à onclose...
  • laissez-nous continuer cette discussion dans le chat

InformationsquelleAutor Kendall Frey | 2012-11-24