Frage

Ich verwende das Beispiel von der Homepage von Socket.io (http://socket.io/). Es funktioniert und alles, aber es gibt eine enorme Verzögerung zwischen dem gesendeten Zeitdaten und wenn diese Daten am anderen Ende empfangen werden.

Ich benutze Xampp, ich habe Socket.html in meinem Dir und navigiere in meinem Browser mit "http: //localhost/socket.html", und ich habe den Server auf Port 8080.

Server:

var io = require('socket.io').listen(8080);

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

HTML -Datei:

<html>
<head>
    <script src="http://localhost:8080/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect('http://localhost:8080');
      socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
      });
    </script>
</head>

<body>

</body>
</html>
War es hilfreich?

Lösung

Ich habe das Problem gefunden.

Auf dem Server habe ich geändert:

var io = require('socket.io').listen(8080);

zu

var io = require('socket.io', { rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling'] }).listen(8080);

Dies zwingt den Server, entweder Websockets, Flash-Sockets oder langwecke zu verwenden. Es würde versuchen, diese in dieser Reihenfolge zu verwenden. Der RemalTtransport zwingt den Server und den Client, zu vergessen, welche Verbindung es zuletzt verwendet hat, und versuchen, sich mit den obigen „Transporten“ zu verbinden.

Auf der Kundenseite habe ich so ziemlich das Gleiche gemacht. Ich fügte hinzu:

{ rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling']}

zum Sockelkonstruktor. Also sah es so aus:

var socket = io.connect('http://localhost:843', { rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling']});

Jetzt scheint es perfekt zu funktionieren.

Danke Leute.

Andere Tipps

Haben Sie es mit einer längeren Nachricht versucht?

Es gibt sicherlich einen Puffer auf der Steckdose. Wenn Sie weniger als X -Bytes senden, gibt es möglicherweise eine Wartezeit, bevor der Puffer gespült wird, da er nicht gefüllt wurde.

Welchen Browser verwenden Sie? Socket.IO nimmt sich auf die Umfrage ab, was viel langsamer wäre als native Browser -Web -Sockets oder Flash -Umfragen.

Die Verwendung von Websockets verbessert das Verhalten in dem Sinne, dass es die Pufferung deaktiviert. Websockets wird mit implementiert mit setNoDelay(true) Wie in der zu sehen ist Websockets Code Es wird also keine Nachrichten puffern.

Sie können WebSockets explizit anfordern, indem Sie das Wort platzieren websocket zuerst in der transports Array. Auf jüngste Versionen von socket.io und engine.io Die richtigen Argumente und Implementierung sieht folgendermaßen aus:

import socketIO from 'socket.io';
const server = express();
const requestHandler = server.listen(PORT, () => console.log(`Listening on ${PORT}`));
const io = socketIO(requestHandler, { transports: ['websocket', 'polling'] });

Und auf der Clientseite:

import io from 'socket.io-client';
let socket = io(SERVER_URL, { transports: ['websocket', 'polling'] });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top