it-swarm.com.de

"Websocket wurde unterbrochen, während die Seite geladen wird" in Firefox für 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

Ich bin neu bei socket.io und habe versucht, danach zu suchen, erhielt aber keine Antwort.

Websocket wird unterbrochen, wenn ich die Seite in Firefox aktualisiere. Deshalb wartet die Serverseite darauf, den Client zu autorisieren.

Hier ist der 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

Dies geschieht, weil Sie Ihren offenen Websocket nicht schließen.

Dieser Code würde diesen Fehler entfernen:

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

Dies scheint ein offener Fehler in Firefox zu sein (Stand 29.03.2015):

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

Der Workaround (vorerst) besteht darin, close () auf dem Websocket vor dem Unload aufzurufen, wie Alexander darauf hingewiesen hat.

Update 2016-04: Laut Bugzilla wird dies in Firefox 48 behoben

12
user1338062

Ich habe gerade die Socket.IO-Tutorials durchlaufen und bin genau auf dieses Problem gestoßen. Ich habe die veröffentlichten Lösungen ausprobiert, aber sie schienen überhaupt nicht zu funktionieren.

Nach einigem Fummeln, Schreien und Gummi-Ducking habe ich endlich herausgefunden, was das Problem war. Das Problem ist, dass versucht wird, eine Verbindung zum Socket herzustellen, bevor die Socketvariablen ordnungsgemäß initialisiert wurden. Javascript boo boo # 1.

Wenn Sie Ihre Datei um jQuery bereinigen und Ihre Funktionen dann wie folgt umschließen: 

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

Sie werden viel mehr Erfolg haben.

2
Joe

Welche Auswirkungen hat dies auf Ihre Bewerbung? Ich vermute, dass es einfach nicht toll ist, einen Fehler in der Konsole zu sehen.

Das Problem hier ist, dass Firefox diesen Fehler protokolliert und Sie nichts dagegen tun können. Es ist nicht möglich, diesen Fehler mit einem try...catch-Block oder über websocket.onerror/websocket.onclose zu erfassen.

Siehe: Wie erhalte ich eine Unterbrechung der WebSocket-Verbindung?

Verbunden:

0
leggetter