Socket.io: Зарезервированы ли события "ping" и/или "pong"?

Созданный на 28 янв. 2016  ·  4Комментарии  ·  Источник: socketio/socket.io

У меня есть некоторый базовый код (см. ниже), который работает, как и ожидалось, когда события называются ding и dong , но ведет себя очень странно, когда события называются ping и pong .

Когда события называются пинг и понг

  • Код сервера будет регистрировать сообщения «connect» и «disconnect», но не сообщения «ping» и «pong».
  • Код клиента будет регистрировать сообщение «ping» и после длительного ожидания (10+ секунд) будет регистрировать сообщение «pong», и если я продолжу ждать, я буду получать больше сообщений «pong» каждые 10+ секунд.

Код сервера

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

Код клиента

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

Я понятия не имею, что здесь происходит. Также это может быть связано с № 1951.

Самый полезный комментарий

Просто попал в ловушку события «пинг» на несколько часов.
Я думаю , что официальный документ может синхронизироваться с документом на GitHub ?
Или, может быть, в документе можно отметить зарезервированные названия событий, чтобы люди снова не попали в ловушку?

Все 4 Комментарий

Я наблюдаю странное поведение при использовании имен событий «ping» / «pong» — похоже, в socket.io есть код, который что-то делает с ping и pong, у меня нет времени на дальнейшее расследование — изменил имя на « капать 'и 'капля'

События ping и pong используются в socket.io-client.
см. https://github.com/socketio/socket.io-client#events

Просто попал в ловушку события «пинг» на несколько часов.
Я думаю , что официальный документ может синхронизироваться с документом на GitHub ?
Или, может быть, в документе можно отметить зарезервированные названия событий, чтобы люди снова не попали в ловушку?

что за пожиратель времени. У всех нас (включая команду socket.io) была одна и та же плохая идея. Так что ЕЩЕ зарезервировано?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги