Socket.io: ¿Son eventos reservados "ping" y/o "pong"?

Creado en 28 ene. 2016  ·  4Comentarios  ·  Fuente: socketio/socket.io

Tengo un código básico (ver más abajo) que funciona como se espera cuando los eventos se denominan ding y dong , pero se comporta de manera muy extraña cuando los eventos se denominan ping y pong.

Cuando los eventos se nombran ping y pong

  • El código del servidor registrará los mensajes de "conexión" y "desconexión", pero no los mensajes de "ping" y "pong".
  • El código del cliente registrará el mensaje "ping" y después de una larga espera (más de 10 segundos) registrará el mensaje "pong", y si sigo esperando, recibiré más mensajes "pong" con más de 10 segundos de diferencia.

Código del servidor

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

Codigo del cliente

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

No tengo idea de lo que está pasando aquí. También esto puede estar relacionado con # 1951

Comentario más útil

Simplemente atrapado por el evento 'ping' durante unas horas.
Creo que el documento oficial puede sincronizarse con el documento en GitHub .
¿O tal vez los nombres de eventos reservados se pueden anotar en el documento para que las personas no queden atrapadas nuevamente?

Todos 4 comentarios

Veo un comportamiento extraño al usar los nombres de eventos 'ping' / 'pong'; parece que hay un código en socket.io que hace algo con ping y pong, no tengo tiempo para investigar más; cambié el nombre a ' goteo' y 'gota'

Los eventos ping y pong se usan en socket.io-client.
consulte https://github.com/socketio/socket.io-client#events

Simplemente atrapado por el evento 'ping' durante unas horas.
Creo que el documento oficial puede sincronizarse con el documento en GitHub .
¿O tal vez los nombres de eventos reservados se pueden anotar en el documento para que las personas no queden atrapadas nuevamente?

que perdida de tiempo Todos (incluido el equipo de socket.io) tuvimos la misma mala idea. Entonces, ¿qué MÁS está reservado?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

MichaelJCole picture MichaelJCole  ·  3Comentarios

stnwk picture stnwk  ·  4Comentarios

varHarrie picture varHarrie  ·  3Comentarios

gCurtisCT picture gCurtisCT  ·  4Comentarios

renkei picture renkei  ·  4Comentarios