J'ai un code de base (voir ci-dessous) qui fonctionne comme prévu lorsque les événements sont nommés ding et dong mais se comporte très étrangement lorsque les événements sont nommés ping et pong
Quand les événements sont nommés ping et pong
Code serveur
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"`);
});
});
Code client
<!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>
Je n'ai aucune idée de ce qui se passe ici. Cela peut aussi être lié à # 1951
Je constate un comportement étrange lors de l'utilisation des noms d'événements 'ping' / 'pong' - il semble y avoir du code dans socket.io qui fait quelque chose avec ping et pong, je n'ai pas le temps d'enquêter plus avant - j'ai changé le nom en ' goutte' et 'goutte'
Les événements ping
et pong
sont utilisés dans socket.io-client.
veuillez consulter https://github.com/socketio/socket.io-client#events
Juste piégé par l'événement 'ping' pendant quelques heures.
Je pense que le document officiel peut se synchroniser avec le document sur GitHub ?
Ou peut-être que les noms d'événements réservés peuvent être notés sur le document afin que les gens ne soient plus piégés ?
quelle perte de temps. Nous avons tous (y compris l'équipe socket.io) eu la même mauvaise idée. Alors quoi d'autre est réservé ?
Commentaire le plus utile
Juste piégé par l'événement 'ping' pendant quelques heures.
Je pense que le document officiel peut se synchroniser avec le document sur GitHub ?
Ou peut-être que les noms d'événements réservés peuvent être notés sur le document afin que les gens ne soient plus piégés ?