const { Server } = require("socket.io") const db = require('node-little-db') const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const io = new Server({ cors: { origin: ["*"] } }); // 日志配置 const log4js = require("log4js"); log4js.configure({ appenders: { socket: { type: "file", filename: "./socket.log" } }, categories: { default: { appenders: ["socket"], level: "debug" } } }); const logger = log4js.getLogger('socket'); // 中间件 = 验证 io.use((socket, next) => { const { MAC, NAME } = socket.handshake.auth; // 新建|查询数据 const config = db.create('config') if (config[NAME] === MAC) { next() } else if (config[NAME] === '') { // 允许第一次空MAC config[NAME] = MAC next() } else { logger.debug(NAME + '验证错误' + MAC); next(new Error('Mac error')) } }) io.on('connection', async socket => { const { NAME, MAC } = socket.handshake.auth logger.debug(NAME, '连接' + MAC) // 断开=>轮询验证 await sleep(5000) socket.disconnect(true) logger.debug(NAME + '二次验证' + MAC) }) console.log(`验证服务启动:49800`) logger.info('验证服务启动:49800') io.listen(45697)