server.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const { Server } = require("socket.io")
  2. const db = require('node-little-db')
  3. const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  4. const io = new Server({
  5. cors: {
  6. origin: ["*"]
  7. }
  8. });
  9. // 日志配置
  10. const log4js = require("log4js");
  11. log4js.configure({
  12. appenders: { socket: { type: "file", filename: "./socket.log" } },
  13. categories: { default: { appenders: ["socket"], level: "debug" } }
  14. });
  15. const logger = log4js.getLogger('socket');
  16. // 中间件 = 验证
  17. io.use((socket, next) => {
  18. const { MAC, NAME } = socket.handshake.auth;
  19. // 新建|查询数据
  20. const config = db.create('config')
  21. if (config[NAME] === MAC) {
  22. next()
  23. } else if (config[NAME] === '') {
  24. // 允许第一次空MAC
  25. config[NAME] = MAC
  26. next()
  27. } else {
  28. logger.debug(NAME + '验证错误' + MAC);
  29. next(new Error('Mac error'))
  30. }
  31. })
  32. io.on('connection', async socket => {
  33. const { NAME, MAC } = socket.handshake.auth
  34. logger.debug(NAME, '连接' + MAC)
  35. // 断开=>轮询验证
  36. await sleep(5000)
  37. socket.disconnect(true)
  38. logger.debug(NAME + '二次验证' + MAC)
  39. })
  40. console.log(`验证服务启动:49800`)
  41. logger.info('验证服务启动:49800')
  42. io.listen(45697)