Socket.io: Les événements "ping" et/ou "pong" sont-ils réservés ?

Créé le 28 janv. 2016  ·  4Commentaires  ·  Source: socketio/socket.io

J'ai un code de base (voir ci-dessous) qui fonctionne comme prévu lorsque les événements sont nommés ding et dong mais se comporte très étrangement lorsque les événements sont nommés ping et pong

Quand les événements sont nommés ping et pong

  • Le code du serveur enregistrera les messages "connect" et "disconnect", mais pas les messages "ping" et "pong"
  • Le code client enregistrera le message "ping" et après une longue attente (10+ secondes) enregistrera le message "pong", et si je continue d'attendre, j'obtiendrai plus de message "pong" toutes les 10+ secondes d'intervalle

Code serveur

const fs             = require('fs');
const http           = require('http');
const path           = require('path');
const SocketIOServer = require('socket.io');

const app = new http.Server();
app.on('request', (req, res) => {

  const index = path.join(__dirname, 'public', 'index.html')

  fs.readFile(index, function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
});
app.listen(3000, 'localhost');

const io = new SocketIOServer(app);


// could also use "connection"
io.on('connect', function (socket) {
  console.log(`${socket.id} "connect"`);

  socket.on('ping', (data) => {
    console.log('Receive "ping"');

    io.emit('pong', {});  
    console.log('Send "pong"');  
  });

  socket.on('disconnect', () => {
    console.log(`${socket.id} "disconnect"`);    
  });
});

Code client

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Socket.IO Events</title>
  </head>
  <body>
    <h1>Socket.IO Events</h1>

    <script src="/socket.io/socket.io.js"></script>
    <script>
      const socket = io();

      socket.on('pong', (data) => {
        console.log('Receive "pong"');
      });

      socket.emit('ping', {});
      console.log('Send "ping"');

    </script>
  </body>
</html>

Je n'ai aucune idée de ce qui se passe ici. Cela peut aussi être lié à # 1951

Commentaire le plus utile

Juste piégé par l'événement 'ping' pendant quelques heures.
Je pense que le document officiel peut se synchroniser avec le document sur GitHub ?
Ou peut-être que les noms d'événements réservés peuvent être notés sur le document afin que les gens ne soient plus piégés ?

Tous les 4 commentaires

Je constate un comportement étrange lors de l'utilisation des noms d'événements 'ping' / 'pong' - il semble y avoir du code dans socket.io qui fait quelque chose avec ping et pong, je n'ai pas le temps d'enquêter plus avant - j'ai changé le nom en ' goutte' et 'goutte'

Les événements ping et pong sont utilisés dans socket.io-client.
veuillez consulter https://github.com/socketio/socket.io-client#events

Juste piégé par l'événement 'ping' pendant quelques heures.
Je pense que le document officiel peut se synchroniser avec le document sur GitHub ?
Ou peut-être que les noms d'événements réservés peuvent être notés sur le document afin que les gens ne soient plus piégés ?

quelle perte de temps. Nous avons tous (y compris l'équipe socket.io) eu la même mauvaise idée. Alors quoi d'autre est réservé ?

Cette page vous a été utile?
0 / 5 - 0 notes