Domanda

sto usando l'esempio dalla homepage Socket.IO (http://socket.io/). Funziona e tutto, ma c'è un enorme ritardo tra il momento i dati vengono inviati, e quando i dati vengono ricevuti su l'altra estremità.

sto usando XAMPP, ho socket.html nel mio dir, e creare una rotta con "http: //localhost/socket.html". Nel mio browser, e ho l'ascolto server sulla porta 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 file:

<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>
È stato utile?

Soluzione

Ho trovato il problema.

Nel server Ho cambiato:

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

a

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

che costringe il server da utilizzare sia WebSockets, prese Flash o lungo polling. Si wil tenta di utilizzare quelli in questo ordine. Le forze rememberTransport il server e client da dimenticare che il collegamento ha usato scorso, e cercano di connettersi con i 'trasporti' di cui sopra.

Sul lato client ho praticamente fatto la stessa cosa. Ho aggiunto:

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

al costruttore socket. Così sembrava che:

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

Ora sembra funzionare perfettamente.

Grazie ragazzi.

Altri suggerimenti

Hai provato con un messaggio più lungo?

C'è sicuramente un buffer sulla presa. Se si invia meno di X byte ci potrebbe essere qualche tempo di attesa prima che il buffer si svuota dal momento che non è stato riempito.

Quale browser stai usando? Socket.IO degrada fino al polling, che sarebbe molto più lento rispetto prese browser web nativo o polling flash.

Uso WebSockets migliora il comportamento nel senso che disabilita il buffering. WebSockets viene implementato con setNoDelay(true) come si può vedere nella WebSockets codice in modo da non tamponare i messaggi.

E 'possibile richiedere WebSockets esplicitamente di prima immissione della parola websocket all'interno della matrice transports. Su versioni recenti di socket.io e engine.io gli argomenti corretti e sguardi di implementazione in questo modo:

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'] });

E sul lato client:

import io from 'socket.io-client';
let socket = io(SERVER_URL, { transports: ['websocket', 'polling'] });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top