gemer před 3 roky
rodič
revize
47e8b01411

+ 7 - 0
.env.development

@@ -0,0 +1,7 @@
+PORT=3000
+VOLUME_DIR=./data
+REDIS_HOST=localhost
+REDIS_PORT=6379
+REDIS_PASSWORD=redis9394
+WATCH_USER=4dage
+WATCH_PASSWORD=4dage168.

+ 7 - 0
combined.log

@@ -0,0 +1,7 @@
+2022-01-23 12:57:15 info: urlredis://:redis9394@localhost:6379 
+2022-01-23 12:57:15 debug: Total Number of Cores: %o 
+2022-01-23 12:57:15 debug: Master 14785 is running 
+2022-01-23 12:57:18 info: 房主自动创建房间:{"roomId":"room-001_t-GusppsiKEC_web","userId":"user-user_001"} 
+2022-01-23 12:57:19 info: 房主自动创建房间:{"roomId":"room-001_t-GusppsiKEC_web","userId":"user-user_001"} 
+2022-01-23 12:57:32 info: 房主自动创建房间:{"roomId":"room-001_t-GusppsiKEC_web","userId":"user-user_001"} 
+2022-01-23 12:57:34 info: 房主自动创建房间:{"roomId":"room-001_t-GusppsiKEC_web","userId":"user-user_001"} 

+ 1 - 1
demo/index.html

@@ -25,7 +25,7 @@
       // 'http://47.115.43.159:3000'
       // var socket = io("http://0.0.0.0:3000");
       // const { roomId, userId, sceneNum, isClient, role, userLimitNum, roomType } = user
-      var socket = io("http://0.0.0.0:8060", {
+      var socket = io("http://0.0.0.0:3000", {
         path: "/test",
         query: {
           userId: "user_001",

+ 1 - 1
index.js

@@ -1,4 +1,4 @@
-import "dotenv/config";
+import "dotenv-flow/config.js";
 import { CoreCluster } from "./src/core/cluster.js";
 
 // import fastify from "fastify";

+ 173 - 10
package-lock.json

@@ -13,7 +13,7 @@
         "@socket.io/cluster-adapter": "^0.1.0",
         "@socket.io/redis-adapter": "^7.1.0",
         "@socket.io/sticky": "^1.0.1",
-        "dotenv": "^14.2.0",
+        "dotenv-flow": "^3.2.0",
         "eiows": "^3.7.3",
         "engine.io": "^6.1.2",
         "fastify": "^3.25.3",
@@ -24,6 +24,9 @@
         "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0",
         "winston": "^3.4.0"
       },
+      "devDependencies": {
+        "cross-env": "^7.0.3"
+      },
       "optionalDependencies": {
         "bufferutil": "^4.0.6",
         "utf-8-validate": "^5.0.8"
@@ -446,6 +449,38 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.1"
+      },
+      "bin": {
+        "cross-env": "src/bin/cross-env.js",
+        "cross-env-shell": "src/bin/cross-env-shell.js"
+      },
+      "engines": {
+        "node": ">=10.14",
+        "npm": ">=6",
+        "yarn": ">=1"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
     "node_modules/debug": {
       "version": "4.3.3",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
@@ -486,12 +521,23 @@
         "node": ">=0.10"
       }
     },
-    "node_modules/dotenv": {
-      "version": "14.2.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.2.0.tgz",
-      "integrity": "sha512-05POuPJyPpO6jqzTNweQFfAyMSD4qa4lvsMOWyTRTdpHKy6nnnN+IYWaXF+lHivhBH/ufDKlR4IWCAN3oPnHuw==",
+    "node_modules/dotenv-flow": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.2.0.tgz",
+      "integrity": "sha512-GEB6RrR4AbqDJvNSFrYHqZ33IKKbzkvLYiD5eo4+9aFXr4Y4G+QaFrB/fNp0y6McWBmvaPn3ZNjIufnj8irCtg==",
+      "dependencies": {
+        "dotenv": "^8.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 8.0.0"
+      }
+    },
+    "node_modules/dotenv-flow/node_modules/dotenv": {
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+      "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/eiows": {
@@ -804,6 +850,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -1064,6 +1116,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/pino": {
       "version": "6.13.4",
       "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.4.tgz",
@@ -1298,6 +1359,27 @@
       "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
       "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
     },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/signal-exit": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
@@ -1495,6 +1577,21 @@
         "webidl-conversions": "^3.0.0"
       }
     },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
     "node_modules/wide-align": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
@@ -1910,6 +2007,26 @@
         "vary": "^1"
       }
     },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      }
+    },
+    "cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dev": true,
+      "requires": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      }
+    },
     "debug": {
       "version": "4.3.3",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
@@ -1933,10 +2050,20 @@
       "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
       "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
     },
-    "dotenv": {
-      "version": "14.2.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.2.0.tgz",
-      "integrity": "sha512-05POuPJyPpO6jqzTNweQFfAyMSD4qa4lvsMOWyTRTdpHKy6nnnN+IYWaXF+lHivhBH/ufDKlR4IWCAN3oPnHuw=="
+    "dotenv-flow": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv-flow/-/dotenv-flow-3.2.0.tgz",
+      "integrity": "sha512-GEB6RrR4AbqDJvNSFrYHqZ33IKKbzkvLYiD5eo4+9aFXr4Y4G+QaFrB/fNp0y6McWBmvaPn3ZNjIufnj8irCtg==",
+      "requires": {
+        "dotenv": "^8.0.0"
+      },
+      "dependencies": {
+        "dotenv": {
+          "version": "8.6.0",
+          "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+          "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
+        }
+      }
     },
     "eiows": {
       "version": "3.7.3",
@@ -2193,6 +2320,12 @@
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
     },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2389,6 +2522,12 @@
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
     },
+    "path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true
+    },
     "pino": {
       "version": "6.13.4",
       "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.4.tgz",
@@ -2551,6 +2690,21 @@
       "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
       "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
     },
+    "shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^3.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true
+    },
     "signal-exit": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
@@ -2720,6 +2874,15 @@
         "webidl-conversions": "^3.0.0"
       }
     },
+    "which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
     "wide-align": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",

+ 6 - 3
package.json

@@ -4,8 +4,8 @@
   "description": "",
   "main": "index.js",
   "scripts": {
-    "dev": "DEBUG=* node index.js",
-    "hot-serve": "npx nodemon index.js"
+    "dev": " NODE_ENV=development DEBUG=* node index.js",
+    "hot-serve": "cross-env NODE_ENV=development npx nodemon index.js"
   },
   "type": "module",
   "author": "",
@@ -15,7 +15,7 @@
     "@socket.io/cluster-adapter": "^0.1.0",
     "@socket.io/redis-adapter": "^7.1.0",
     "@socket.io/sticky": "^1.0.1",
-    "dotenv": "^14.2.0",
+    "dotenv-flow": "^3.2.0",
     "eiows": "^3.7.3",
     "engine.io": "^6.1.2",
     "fastify": "^3.25.3",
@@ -29,5 +29,8 @@
   "optionalDependencies": {
     "bufferutil": "^4.0.6",
     "utf-8-validate": "^5.0.8"
+  },
+  "devDependencies": {
+    "cross-env": "^7.0.3"
   }
 }

+ 5 - 0
src/connection/redis.js

@@ -1,6 +1,11 @@
 import { createClient } from "redis";
+import cluster from "cluster";
+import { logger } from "../core/logger.js";
 
 const url = `redis://:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`;
+if (cluster.isPrimary) {
+  logger.info("url" + url);
+}
 const pubClient = createClient({ url: url });
 const subClient = pubClient.duplicate();
 

+ 3 - 1
src/controller/roomController.js

@@ -20,7 +20,7 @@ const isHoster = (role) => {
 const buildRoom = async (roomId, userId, user) => {
   const hasJoin = await pubClient.HVALS(roomId, userId);
   if (hasJoin.length === 0) {
-    logger.log("创建房间", roomId);
+    console.log("创建房间", roomId);
     await pubClient.hSet(roomId, userId, JSON.stringify(user));
   }
 };
@@ -113,8 +113,10 @@ export async function roomController(socket) {
       await pubClient.hSet(userUniqueId, user);
       await pubClient.expire(userUniqueId, 60 * 60 * 1);
 
+      console.log("1111");
       // 房主自动创建房间
       if (isHoster(role)) {
+        logger.info("房主自动创建房间:" + JSON.stringify({ roomId: roomUniqueId, userId: userUniqueId }));
         buildRoom(roomUniqueId, userUniqueId, user);
         socket.join(roomUniqueId);
       }

+ 3 - 2
src/core/cluster.js

@@ -17,8 +17,9 @@ export class CoreCluster {
   }
   attachThead() {
     if (cluster.isMaster) {
-      console.log("Total Number of Cores: %o", numCPUs);
-      console.log(`Master ${process.pid} is running`);
+      logger.level = "debug";
+      logger.debug("Total Number of Cores: %o", numCPUs);
+      logger.debug(`Master ${process.pid} is running`);
 
       // setup sticky sessions
       const httpServer = http.createServer();

+ 11 - 6
src/core/logger.js

@@ -1,16 +1,21 @@
-import winston from "winston";
+import { transports, createLogger, format } from "winston";
+import cluster from "cluster";
 
-const logger = winston.createLogger({
+const logger = createLogger({
   level: "info",
-  format: winston.format.json(),
   defaultMeta: { service: "user-service" },
+  format: format.combine(
+    format.timestamp({
+      format: "YYYY-MM-DD HH:mm:ss",
+    }),
+    format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}` + (info.splat !== undefined ? `${info.splat}` : " ")),
+  ),
   transports: [
-    //
     // - Write all logs with importance level of `error` or less to `error.log`
     // - Write all logs with importance level of `info` or less to `combined.log`
     //
-    new winston.transports.File({ filename: "error.log", level: "error" }),
-    new winston.transports.File({ filename: "combined.log" }),
+    new transports.File({ filename: "error.log", level: "error" }),
+    new transports.File({ filename: "combined.log" }),
   ],
 });
 export { logger };