server.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const express = require('express');
  2. const path = require('path');
  3. const app = express();
  4. const port = 8898;
  5. const wsPort = 8899;
  6. const WebSocket = require('ws')
  7. const socket = new WebSocket.Server({port:8899})
  8. const chokidar = require('chokidar');
  9. // 要监视的根目录
  10. const rootDir = '.';
  11. // 要忽略的目录数组
  12. const ignoredDirs = ['.vscode', '.idea', 'node_modules', '.git','*.zip'];
  13. // 保存所有连接的客户端
  14. const clients = [];
  15. socket.on('connection',function connection(ws,req){
  16. clients.push(ws);
  17. // 当客户端断开连接时,移除客户端
  18. ws.on('close', () => {
  19. console.log('Client disconnected');
  20. const index = clients.indexOf(ws);
  21. if (index !== -1) clients.splice(index, 1);
  22. });
  23. const ip = req.socket.remoteAddress
  24. const port = req.socket.remotePort
  25. const clientName = ip + port;
  26. console.log('%s is connected ',clientName)
  27. })
  28. chokidar.watch(rootDir, {
  29. ignored: ignoredDirs.concat('**/*.js', '**/*.html'),
  30. ignoreInitial: true
  31. }).on('all', (event, path) => {
  32. switch (event) {
  33. case "change":
  34. case "add":
  35. clients.forEach((client) => {
  36. if (client.readyState === WebSocket.OPEN) {
  37. client.send(JSON.stringify(true));
  38. }
  39. });
  40. break;
  41. }
  42. });
  43. app.use(express.static(path.join(__dirname, '/')));
  44. app.listen(port, () => {
  45. console.log(`server node start ${port}!`,);
  46. })
  47. console.log(`正在监视${rootDir}目录...`);
  48. console.log('WebSocket服务启动在端口:'+wsPort);