Socket.io: 「ping」および/または「pong」は予約済みのイベントですか?

作成日 2016年01月28日  ·  4コメント  ·  ソース: socketio/socket.io

イベントの名前がdingdongの場合は期待どおりに機能するが、イベントの名前がpingpongの場合は非常に奇妙な動作をする基本的なコード(以下を参照)があります。

イベントの名前がpingpongの場合

  • サーバーコードは「接続」および「切断」メッセージをログに記録しますが、「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'イベント名を使用しているときに奇妙な動作が見られます-pingとpongで何かを行うコードがsocket.ioにあるようです、さらに調査する時間がありません-名前を 'に変更しましたドリップ 'と'ドロップ '

pingおよびpongイベントはsocket.io-clientで使用されます。
https://github.com/socketio/socket.io-client#eventsを参照してください

'ping'イベントに数時間閉じ込められただけです。
公式ドキュメントGitHubのドキュメントと同期する可能性があると思いますか?
または、予約されたイベント名をドキュメントに記録して、人々が再び閉じ込められないようにすることができますか?

なんて時間の無駄だ。 私たち全員(socket.ioチームを含む)は同じ悪い考えを持っていました。 では、どのELSEが予約されているのでしょうか。

このページは役に立ちましたか?
0 / 5 - 0 評価