"websocket was interrupted while page is loading" on Firefox for Socket.io

Websocketsocket.io

Websocket Problem Overview


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

I am new to socket.io and I have tried to search for this, but I didn't get an answer.

Websocket is interrupted when I refresh page on Firefox. That's why server side is waiting to authorise client.

Here is 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>

Websocket Solutions


Solution 1 - Websocket

It happens because, you are not closing your open websocket.

This code would remove this error:

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

Solution 2 - Websocket

This seems to be an open bug in Firefox (as of 2015-03-29):

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

The workaround (for now) is to call close() on the websocket on beforeunload, as Alexander pointed out.

Update 2016-04: According to Bugzilla, this will be fixed in Firefox 48

Solution 3 - Websocket

I was just running through the Socket.IO tutorials and I ran into this exact problem. I tried the posted solutions but they didn't seem to work at all.

After some fiddling and some screaming and some rubber-ducking, I finally figured out what the issue was. The issue is that it's trying to connect to the socket before the socket variables have been properly initialized. Javascript boo boo #1.

If you will ammend your file to include jQuery and then wrap your functions like so:

    <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>

You will have much more success.

Solution 4 - Websocket

What impact does this have on your application? My guess is that it's just not great to see an error in the console.

The problem here is that you are seeing Firefox loggin this error and there's nothing you can do about it. It's not possible to capture this error with a try...catch block or via websocket.onerror/websocket.onclose.

See: https://stackoverflow.com/questions/13616960/how-do-i-catch-a-websocket-connection-interruption

Related:

Solution 5 - Websocket

I've had this problem with our custom Undertow-based webserver for years -- my problem was that my server was not responding to the socket close message.

Based on a comment by Jan Wielemaker I checked my socket close handler code for AbstractReceiveListener.onFullCloseMessage and realized I had not called the super method. After adding super.close() the socket closes cleanly on the client and no error is emitted.

Solution 6 - Websocket

One solution is to put a timeout on the disconnect event.

         setTimeout(() => {
            $('#offlineModal').modal('show')
          }, 5000)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAmarView Question on Stackoverflow
Solution 1 - WebsocketAlexander C.View Answer on Stackoverflow
Solution 2 - Websocketuser1338062View Answer on Stackoverflow
Solution 3 - WebsocketJoeView Answer on Stackoverflow
Solution 4 - WebsocketleggetterView Answer on Stackoverflow
Solution 5 - WebsocketLawrence DolView Answer on Stackoverflow
Solution 6 - WebsocketabyzView Answer on Stackoverflow