Question

J'utilise l'exemple de la page d'accueil Socket.IO (http://socket.io/). Il fonctionne et tout, mais il y a un énorme décalage entre les données de temps est envoyé, et que lorsque des données sont reçues à l'autre extrémité.

J'utilise XAMPP, je socket.html dans mon répertoire, et bien en utilisant « http: //localhost/socket.html ». Dans mon navigateur, et je l'écoute du serveur sur le port 8080

Serveur:

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

fichier HTML:

<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>
Était-ce utile?

La solution

J'ai trouvé le problème.

Dans le serveur J'ai changé:

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

à

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

qui oblige le serveur à utiliser soit WebSockets, prise Flash ou long vote. Il wil essayer d'utiliser ceux dans cet ordre. Les forces de rememberTransport le serveur et client d'oublier quelle connexion il utilisé en dernier, et d'essayer de se connecter avec les « transports » ci-dessus.

Du côté du client que je viens à peu près fait la même chose. J'ai ajouté:

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

au constructeur de la douille. Donc, il ressemblait à:

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

Maintenant, il semble fonctionner parfaitement.

Merci les gars.

Autres conseils

Avez-vous essayé avec un message plus?

Il y a sûrement un tampon sur la prise. Si vous envoyez moins de X octets il pourrait y avoir un certain temps d'attente avant que le tampon est vidé, car il n'a pas été rempli.

Quel navigateur utilisez-vous? Socket.IO se dégrade vers le bas des sondages, ce qui serait beaucoup plus lent que les sockets web du navigateur natif ou polling flash.

Utilisation websockets améliore le comportement dans le sens où il désactive en mémoire tampon. Websockets est mis en œuvre avec setNoDelay(true) comme on peut le voir dans le websockets le code il ne sera pas mémoire tampon des messages.

Vous pouvez demander explicitement websockets en plaçant le mot websocket première à l'intérieur du tableau de transports. Sur les versions récentes de socket.io et engine.io les bons arguments et des regards de mise en œuvre comme ceci:

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

Et du côté client:

import io from 'socket.io-client';
let socket = io(SERVER_URL, { transports: ['websocket', 'polling'] });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top