イベントの名前がdingとdongの場合は期待どおりに機能するが、イベントの名前がpingとpongの場合は非常に奇妙な動作をする基本的なコード(以下を参照)があります。
イベントの名前がpingと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' / 'pong'イベント名を使用しているときに奇妙な動作が見られます-pingとpongで何かを行うコードがsocket.ioにあるようです、さらに調査する時間がありません-名前を 'に変更しましたドリップ 'と'ドロップ '
ping
およびpong
イベントはsocket.io-clientで使用されます。
https://github.com/socketio/socket.io-client#eventsを参照してください
'ping'イベントに数時間閉じ込められただけです。
公式ドキュメントはGitHubのドキュメントと同期する可能性があると思いますか?
または、予約されたイベント名をドキュメントに記録して、人々が再び閉じ込められないようにすることができますか?
なんて時間の無駄だ。 私たち全員(socket.ioチームを含む)は同じ悪い考えを持っていました。 では、どのELSEが予約されているのでしょうか。
最も参考になるコメント
'ping'イベントに数時間閉じ込められただけです。
公式ドキュメントはGitHubのドキュメントと同期する可能性があると思いますか?
または、予約されたイベント名をドキュメントに記録して、人々が再び閉じ込められないようにすることができますか?