Socket.io: “ping”和/或“pong”是保留事件吗?

创建于 2016-01-28  ·  4评论  ·  资料来源: socketio/socket.io

我有一些基本代码(见下文)当事件命名为dingdong时按预期工作,但当事件命名为pingpong时表现非常奇怪

当事件被命名为pingpong

  • 服务器代码将记录“connect”和“disconnect”消息,但不记录“ping”和“pong”消息
  • 客户端代码将记录“ping”消息,并在长时间等待(10 多秒)后记录“pong”消息,如果我继续等待,我将每隔 10 多秒收到更多“pong”消息

服务器代码

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有关

最有用的评论

只是被“ping”事件困住了几个小时。
我认为官方文档可能会与GitHub 上的文档同步?
或者也许可以在文档上注明保留的事件名称,以免人们再次被困?

所有4条评论

我在使用“ping”/“pong”事件名称时看到了奇怪的行为 - socket.io 中似乎确实有代码可以处理 ping 和 pong,我没有时间进一步调查 - 将名称更改为 '滴”和“滴”

pingpong事件在 socket.io-client 中使用。
请参阅https://github.com/socketio/socket.io-client#events

只是被“ping”事件困住了几个小时。
我认为官方文档可能会与GitHub 上的文档同步?
或者也许可以在文档上注明保留的事件名称,以免人们再次被困?

真是浪费时间。 我们所有人(包括 socket.io 团队)都有同样的坏主意。 那么保留什么 ELSE 呢?

此页面是否有帮助?
0 / 5 - 0 等级