Tengo un código básico (ver más abajo) que funciona como se espera cuando los eventos se denominan ding y dong , pero se comporta de manera muy extraña cuando los eventos se denominan ping y pong.
Cuando los eventos se nombran ping y pong
Código del 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"`);
});
});
Codigo del 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>
No tengo idea de lo que está pasando aquí. También esto puede estar relacionado con # 1951
Veo un comportamiento extraño al usar los nombres de eventos 'ping' / 'pong'; parece que hay un código en socket.io que hace algo con ping y pong, no tengo tiempo para investigar más; cambié el nombre a ' goteo' y 'gota'
Los eventos ping
y pong
se usan en socket.io-client.
consulte https://github.com/socketio/socket.io-client#events
Simplemente atrapado por el evento 'ping' durante unas horas.
Creo que el documento oficial puede sincronizarse con el documento en GitHub .
¿O tal vez los nombres de eventos reservados se pueden anotar en el documento para que las personas no queden atrapadas nuevamente?
que perdida de tiempo Todos (incluido el equipo de socket.io) tuvimos la misma mala idea. Entonces, ¿qué MÁS está reservado?
Comentario más útil
Simplemente atrapado por el evento 'ping' durante unas horas.
Creo que el documento oficial puede sincronizarse con el documento en GitHub .
¿O tal vez los nombres de eventos reservados se pueden anotar en el documento para que las personas no queden atrapadas nuevamente?