web-dev-qa-db-fra.com

"websocket a été interrompu pendant le chargement de la page" sur Firefox pour Socket.io

Error: The connection to <websocket> was interrupted while the page was loading.
Source File: localhost/socket.io/node_modules/socket.io-client/dist/socket.io.js
Line: 2371

Je suis nouveau sur socket.io et j'ai essayé de le rechercher, mais je n'ai pas eu de réponse.

Websocket est interrompu lorsque j'actualise la page sur Firefox. C'est pourquoi le côté serveur attend pour autoriser le client.

Voici le code:

server.js-->
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    //alert(JSON.stringify(data));  
    console.log(data);
  });

});

index.html

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>
    <script>

      var socket = io.connect('http://localhost:8080');

      socket.on('news', function (data) {
        alert(JSON.stringify(data));
        console.log(data);
        socket.emit('my next event', { my: 'data' });
      });

    </script>
43
Amar

Cela arrive parce que vous ne fermez pas votre websocket ouvert.

Ce code supprimerait cette erreur:

$(window).on('beforeunload', function(){
    socket.close();
});
41
Alexander C.

Cela semble être un bogue ouvert dans Firefox (à partir du 2015-03-29):

https://bugzilla.mozilla.org/show_bug.cgi?id=712329

La solution de contournement (pour le moment) consiste à appeler close () sur le WebSocket avant le téléchargement, comme l'a signalé Alexander.

Mise à jour 2016-04: selon Bugzilla, ce problème sera résolu dans Firefox 48.

12
user1338062

Je venais de parcourir les tutoriels Socket.IO et je suis tombé sur ce problème. J'ai essayé les solutions affichées mais elles ne semblaient pas fonctionner du tout.

Après quelques manipulations, des cris et des canards, j'ai enfin compris quel était le problème. Le problème est qu'il essaie de se connecter au socket avant que les variables du socket n'aient été correctement initialisées. Javascript boo boo # 1.

Si vous souhaitez modifier votre fichier pour y inclure jQuery, puis envelopper vos fonctions comme suit: 

    <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
	<script>
    $(function(){
      var socket = io.connect('http://localhost:8080');

      socket.on('news', function (data) {
        alert(JSON.stringify(data));
        console.log(data);
        socket.emit('my next event', { my: 'data' });
      });	
    });
    </script>

Vous aurez beaucoup plus de succès.

2
Joe

Quel impact cela a-t-il sur votre application? J'imagine que ce n'est pas agréable de voir une erreur dans la console.

Le problème ici est que Firefox constate cette erreur et que vous ne pouvez rien y faire. Il est impossible de capturer cette erreur avec un bloc try...catch ou via websocket.onerror/websocket.onclose.

Voir: Comment intercepter une interruption de connexion WebSocket?

En relation:

0
leggetter