Socket.io: Os eventos "ping" e/ou "pong" são reservados?

Criado em 28 jan. 2016  ·  4Comentários  ·  Fonte: socketio/socket.io

Eu tenho algum código básico (veja abaixo) que funciona como esperado quando os eventos são chamados de ding e dong , mas se comportam de maneira muito estranha quando os eventos são chamados de ping e pong

Quando os eventos são chamados de ping e pong

  • O código do servidor registrará as mensagens "conectar" e "desconectar", mas não as mensagens "ping" e "pong"
  • O código do cliente registrará a mensagem "ping" e após uma longa espera (10+ segundos) registrará a mensagem "pong", e se eu continuar esperando, obterei mais mensagens "pong" a cada 10+ segundos de intervalo

Código do 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"`);    
  });
});

Código do 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>

Não tenho ideia do que está acontecendo aqui. Também isso pode estar relacionado a #1951

Comentários muito úteis

Apenas preso pelo evento 'ping' por algumas horas.
Eu acho que o documento oficial pode sincronizar com o documento no GitHub ?
Ou talvez os nomes de eventos reservados possam ser anotados no documento para que as pessoas não fiquem presas novamente?

Todos 4 comentários

Estou vendo um comportamento estranho ao usar nomes de eventos 'ping' / 'pong' - parece haver código no socket.io que faz algo com ping e pong, não tenho tempo para investigar mais - mudou o nome para ' gotejamento' e 'gota'

Os eventos ping e pong são usados ​​no socket.io-client.
consulte https://github.com/socketio/socket.io-client#events

Apenas preso pelo evento 'ping' por algumas horas.
Eu acho que o documento oficial pode sincronizar com o documento no GitHub ?
Ou talvez os nomes de eventos reservados possam ser anotados no documento para que as pessoas não fiquem presas novamente?

que perda de tempo. Todos nós (incluindo a equipe do socket.io) tivemos a mesma má ideia. Então, o que mais é reservado?

Esta página foi útil?
0 / 5 - 0 avaliações