Socket.io: Apakah "ping" dan/atau "pong" merupakan acara yang dicadangkan?

Dibuat pada 28 Jan 2016  ·  4Komentar  ·  Sumber: socketio/socket.io

Saya memiliki beberapa kode dasar (lihat di bawah) yang berfungsi seperti yang diharapkan ketika acara diberi nama ding dan dong tetapi berperilaku sangat aneh ketika acara diberi nama ping dan pong

Ketika acara diberi nama ping dan pong

  • Kode server akan mencatat pesan "sambungkan" dan "putuskan", tetapi bukan pesan "ping" dan "pong"
  • Kode klien akan mencatat pesan "ping" dan setelah menunggu lama (10+ detik) akan mencatat pesan "pong", dan jika saya terus menunggu, saya akan mendapatkan lebih banyak pesan "pong" setiap 10+ detik.

Kode Server

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

Kode Klien

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

Saya tidak tahu apa yang terjadi di sini. Juga ini mungkin terkait dengan #1951

Komentar yang paling membantu

Hanya terjebak oleh acara 'ping' selama beberapa jam.
Saya pikir dokumen resmi dapat disinkronkan dengan dokumen di GitHub ?
Atau mungkin nama event yang dicadangkan bisa dicantumkan di dokumen agar orang tidak terjebak lagi?

Semua 4 komentar

Saya melihat perilaku aneh saat menggunakan nama acara 'ping' / 'pong' - tampaknya ada kode di socket.io yang melakukan sesuatu dengan ping dan pong, saya tidak punya waktu untuk menyelidiki lebih lanjut - mengubah nama menjadi ' menetes' dan 'jatuh'

Acara ping dan pong digunakan di socket.io-client.
silakan lihat https://github.com/socketio/socket.io-client#events

Hanya terjebak oleh acara 'ping' selama beberapa jam.
Saya pikir dokumen resmi dapat disinkronkan dengan dokumen di GitHub ?
Atau mungkin nama event yang dicadangkan bisa dicantumkan di dokumen agar orang tidak terjebak lagi?

apa pembuang waktu. Kami semua (termasuk tim socket.io) memiliki ide buruk yang sama. Jadi apa ELSE yang dicadangkan?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat