gemercheung il y a 3 ans
Parent
commit
d6605aad60
3 fichiers modifiés avec 161 ajouts et 99 suppressions
  1. 120 55
      packages/main/command/test.mjs
  2. 2 1
      packages/main/src/mainWindow.ts
  3. 39 43
      packages/renderer/src/App.vue

+ 120 - 55
packages/main/command/test.mjs

@@ -5,17 +5,20 @@ const url = process.argv[2];
 const count = process.argv[3];
 const userStartId = process.argv[4];
 const testSceneNum = process.argv[5] || "t-test";
-const roomId = process.argv[6] || "00001";
+const roomStartId = process.argv[6] || "00001";
 const isMockCamera = process.argv[7] || 0;
 const cameraInterval = process.argv[8] || 3000;
+const roomNumber = process.argv[9] || 50;
 let testCamera;
 console.log(
   "argv:",
+  count,
   userStartId,
   testSceneNum,
-  roomId,
+  roomStartId,
   isMockCamera,
-  cameraInterval
+  cameraInterval,
+  roomNumber
 );
 
 console.log("socket-info::url:config-->", url);
@@ -24,9 +27,11 @@ console.log("socket-info::start-->压力测试正在开始");
 const URL = url || process.env.URL;
 // http://zhang9394@zhangyupeng:face3d.4dage.com:7005/zhangyupeng/chatIM.git
 const MAX_CLIENTS = Number(count) || 500;
-const CLIENT_CREATION_INTERVAL_IN_MS = 10;
-const EMIT_INTERVAL_IN_MS = 1000;
-const EMIT_INTERVAL_IN_MS_camera = cameraInterval;
+
+// const CLIENT_CREATION_INTERVAL_IN_MS = 0;
+// // const EMIT_INTERVAL_IN_MS = 100;
+// const EMIT_INTERVAL_IN_MS_camera = Number(cameraInterval);
+// let sendcameraIntervalTimer;
 // wws://test-socket.4dkankan.com/watch
 let clientCount = 0;
 let lastReport = new Date().getTime();
@@ -35,6 +40,31 @@ let packetsSinceLastReport = 0;
 // let roomId = "00001";
 let userLimitNum = MAX_CLIENTS;
 let agentId = 0;
+function sleep(ms) {
+  return new Promise((resolve) => setTimeout(resolve, ms));
+}
+function range(start, end) {
+  return Array(end - start + 1)
+    .fill()
+    .map((_, idx) => start + idx);
+}
+const groups = (arr, chunkSize) => {
+  return arr
+    .map((e, i) => {
+      return i % chunkSize === 0 ? arr.slice(i, i + chunkSize) : null;
+    })
+    .filter((e) => {
+      return e;
+    });
+};
+
+// new Array(Number(count)).fill(0).forEach((_, index) => {
+//   // console.log("agent", index);
+//   const isLast = (index + 1) % roomNumber === 0;
+//   if (isLast) {
+//     console.log("isLast", index);
+//   }
+// });
 
 const createAgent = () => {
   agentId += 1;
@@ -42,12 +72,16 @@ const createAgent = () => {
   const userId = `${userStartId}${agentId}`;
   const oid = `oid-${userStartId}${agentId}`;
   const role = agentId === 1 ? "leader" : "customer";
-  createClient({ userId, nickName, from: "0", role: role, oid });
-  createClient({ userId, nickName, from: "1", role: role, oid });
-  createClient({ userId, nickName, from: "2", role: role, oid });
+  const roomId = "";
+
+  console.log("agentId", agentId);
+
+  // createClient({ userId, nickName, from: "0", role: role, oid });
+  // createClient({ userId, nickName, from: "1", role: role, oid });
+  // createClient({ userId, nickName, from: "2", role: role, oid });
 };
 
-const createClient = ({ userId, nickName, from, role, oid }) => {
+const createClient = ({ userId, nickName, from, role, oid, roomId }) => {
   // for demonstration purposes, some clients stay stuck in HTTP long-polling
 
   const socket = io(URL, {
@@ -74,52 +108,53 @@ const createClient = ({ userId, nickName, from, role, oid }) => {
     },
   });
 
-  if (Number(isMockCamera) === 1) {
-    setInterval(() => {
-      const data = {
-        testUserId: userId,
-        item: {
-          qua: {
-            _x: -0.11495106988815072,
-            _y: 0.13408027376477993,
-            _z: 0.015660797097947755,
-            _w: 0.9841562229407423,
-          },
-          mode: "panorama",
-          pos: {
-            x: 1.7477431297302246,
-            y: -0.1338435709476471,
-            z: 1.3797638416290283,
-          },
-          type: "Rotate",
-          pano: "1",
-          target: {
-            x: 1.4874317088952322,
-            y: -0.3643028004004215,
-            z: 0.442146378191566,
-          },
-        },
-      };
-      socket.emit("client-benmark-server", data);
-    }, EMIT_INTERVAL_IN_MS_camera);
-  }
-
-  setInterval(() => {
-    socket.emit("client to server event");
-  }, EMIT_INTERVAL_IN_MS);
-
-  socket.on("server-benmark-client", (data) => {
-    packetsSinceLastReport++;
-    testCamera = data;
-    // console.log("客户端收到服务端-镜头-MOCK", data);
-  });
+  // if (Number(isMockCamera) === 1 && Number(from) === 0) {
+  //   console.log(userId + "底层v3开启发送镜头");
+  //   setInterval(() => {
+  //     const data = {
+  //       testUserId: userId,
+  //       item: {
+  //         qua: {
+  //           _x: -0.11495106988815072,
+  //           _y: 0.13408027376477993,
+  //           _z: 0.015660797097947755,
+  //           _w: 0.9841562229407423,
+  //         },
+  //         mode: "panorama",
+  //         pos: {
+  //           x: 1.7477431297302246,
+  //           y: -0.1338435709476471,
+  //           z: 1.3797638416290283,
+  //         },
+  //         type: "Rotate",
+  //         pano: "1",
+  //         target: {
+  //           x: 1.4874317088952322,
+  //           y: -0.3643028004004215,
+  //           z: 0.442146378191566,
+  //         },
+  //       },
+  //     };
+  //     socket.emit("client to server event", data);
+  //   }, EMIT_INTERVAL_IN_MS_camera);
+  // }
+
+  // setInterval(() => {
+  //   socket.emit("client to server event");
+  // }, EMIT_INTERVAL_IN_MS);
+
+  // socket.on("server-benmark-client", (data) => {
+  //   packetsSinceLastReport++;
+  //   testCamera = data;
+  //   // console.log("客户端收到服务端-镜头-MOCK", data);
+  // });
 
   // socket.emit("server-interval-room-broadcast", { time: 1000 });
   // socket.on("client-interval-room-broadcast", (data) => {
   //   console.log(`客户端${userId}收到房间播报-MOCK"`, data);
   // });
 
-  socket.on("server to client event", () => {
+  socket.on("server to client event", (data) => {
     packetsSinceLastReport++;
   });
 
@@ -127,12 +162,42 @@ const createClient = ({ userId, nickName, from, role, oid }) => {
     console.log(`disconnect due to ${reason}`);
   });
 
-  if (++clientCount < MAX_CLIENTS) {
-    setTimeout(createAgent, CLIENT_CREATION_INTERVAL_IN_MS);
-  }
+  // if (++clientCount < MAX_CLIENTS) {
+  //   setTimeout(createAgent, CLIENT_CREATION_INTERVAL_IN_MS);
+  // }
 };
 
-createAgent();
+const chunkSize = Number(roomNumber);
+const arr = range(1, Number(count));
+
+groups(arr, chunkSize).forEach((group, gIndex) => {
+  // console.log("group", group);
+
+  Array.from(group).forEach(async (agent, index) => {
+    try {
+      // console.log("agent-1", agent, gIndex + 1);
+      const nickName = `test_name_${userStartId}${agent}`;
+      const userId = `${userStartId}${agent}`;
+      const oid = `oid-${userStartId}${agent}`;
+      const roomId = `${roomStartId}${gIndex + 1}`;
+      let role = index === 0 ? "leader" : "customer";
+      console.log("agent-2", {
+        userId,
+        nickName,
+        role,
+        oid,
+        roomId,
+      });
+
+      createClient({ userId, nickName, from: "0", role: role, oid, roomId });
+      createClient({ userId, nickName, from: "1", role: role, oid, roomId });
+      createClient({ userId, nickName, from: "2", role: role, oid, roomId });
+    } catch (error) {
+      console.log("初始化");
+    }
+  });
+});
+// createAgent();
 
 const printReport = () => {
   const now = new Date().getTime();
@@ -151,4 +216,4 @@ const printReport = () => {
   lastReport = now;
 };
 
-setInterval(printReport, 5000);
+// setInterval(printReport, 5000);

+ 2 - 1
packages/main/src/mainWindow.ts

@@ -44,6 +44,7 @@ async function createWindow() {
         userStartId,
         testSceneNum,
         isMockCamera,
+        roomNumber,
         cameraInterval,
         roomId, stop } = data;
       if (stop) {
@@ -72,7 +73,7 @@ async function createWindow() {
 
         // browserWindow.webContents.send('terminal.resourcesPath', app.isPackaged);
         ptyProcess = pty.spawn(shell, [`${nodePath} ${BenmarkFilePath}`, `${url}`, `${count}`,
-        `${userStartId}`, `${testSceneNum}`, `${roomId}`, `${isMockCamera}`, `${cameraInterval}`], {
+        `${userStartId}`, `${testSceneNum}`, `${roomId}`, `${isMockCamera}`, `${cameraInterval}`,`${roomNumber}`], {
           name: 'xterm-color',
           cols: 80,
           rows: 30,

+ 39 - 43
packages/renderer/src/App.vue

@@ -1,19 +1,20 @@
 <script lang="ts" setup>
-import './app.css';
-import { ipc } from '#preload';
-import { Terminal } from 'xterm';
-import { onMounted, ref } from 'vue';
-import { FitAddon } from 'xterm-addon-fit';
+import "./app.css";
+import { ipc } from "#preload";
+import { Terminal } from "xterm";
+import { onMounted, ref } from "vue";
+import { FitAddon } from "xterm-addon-fit";
 
 //
 const config = ref({
-  url: 'wss://test-socket.4dkankan.com',
+  url: "wss://test-socket.4dkankan.com",
   count: 200,
-  userStartId: '6666666',
-  testSceneNum: 't-test',
-  roomId: '00001',
-  isMockCamera: '0',
-  cameraInterval: 10000,
+  userStartId: "6666666",
+  testSceneNum: "t-test",
+  roomId: "00001",
+  isMockCamera: "0",
+  cameraInterval: 100,
+  roomNumber: 50,
   isStart: false,
 });
 let terminal: Terminal | null;
@@ -25,18 +26,18 @@ onMounted(() => {
   terminal.loadAddon(fitAddon);
 
   const terminalContainer: HTMLElement | null =
-    document.getElementById('terminal');
+    document.getElementById("terminal");
   if (terminalContainer) {
     terminal.open(terminalContainer);
     fitAddon.fit();
     // console.log('ipcRenderer', window.ipc);
-    ipc.on('terminal.incomingData', (event, data) => {
-      console.log('1111', data);
+    ipc.on("terminal.incomingData", (event, data) => {
+      console.log("1111", data);
       if (terminal) terminal.write(data);
     });
   }
-  ipc.on('terminal.resourcesPath', (_, data) => {
-    window.alert('resourcesPath: ' + JSON.stringify(data));
+  ipc.on("terminal.resourcesPath", (_, data) => {
+    window.alert("resourcesPath: " + JSON.stringify(data));
   });
 });
 
@@ -44,7 +45,7 @@ onMounted(() => {
 
 function start() {
   config.value.isStart = true;
-  ipc.send('start-Benmark-test', {
+  ipc.send("start-Benmark-test", {
     url: config.value.url,
     count: config.value.count,
     userStartId: config.value.userStartId,
@@ -52,11 +53,12 @@ function start() {
     roomId: config.value.roomId,
     isMockCamera: config.value.isMockCamera,
     cameraInterval: config.value.cameraInterval,
+    roomNumber: config.value.roomNumber,
   });
 }
 function stop() {
   config.value.isStart = false;
-  ipc.send('start-Benmark-test', {
+  ipc.send("start-Benmark-test", {
     stop: true,
   });
   setTimeout(() => {
@@ -72,55 +74,46 @@ function stop() {
   <fieldset>
     <legend>配置信息</legend>
     <figure>
-      <span class="label">socket地址URL:</span> <input v-model="config.url">
+      <span class="label">socket地址URL:</span> <input v-model="config.url" />
     </figure>
     <figure>
-      <span class="label">测试人数:</span> <input v-model="config.count">
+      <span class="label">测试人数:</span> <input v-model="config.count" />
     </figure>
     <figure>
       <span class="label">用户起始ID:</span>
-      <input v-model="config.userStartId">
+      <input v-model="config.userStartId" />
     </figure>
     <figure>
       <span class="label">测试场景号:</span>
-      <input v-model="config.testSceneNum">
+      <input v-model="config.testSceneNum" />
     </figure>
     <figure>
-      <span class="label">测试房间号:</span>
-      <input v-model="config.roomId">
+      <span class="label">房间起始ID:</span>
+      <input v-model="config.roomId" />
+    </figure>
+
+    <figure>
+      <span class="label">单个房间人数:</span>
+      <input v-model="config.roomNumber" />
     </figure>
     <figure>
       <span class="label">是否开启发送镜头数据:</span>
       <select v-model="config.isMockCamera">
-        <option value="1">
-          是
-        </option>
-        <option value="0">
-          否
-        </option>
+        <option value="1">是</option>
+        <option value="0">否</option>
       </select>
     </figure>
     <figure>
       <span class="label">镜头数据间隔:</span>
-      <input v-model="config.cameraInterval">
+      <input v-model="config.cameraInterval" />
     </figure>
   </fieldset>
 
   <div class="btns">
-    <button
-      v-show="!config.isStart"
-      class="start"
-      @click="start"
-    >
+    <button v-show="!config.isStart" class="start" @click="start">
       开始测试
     </button>
-    <button
-      v-show="config.isStart"
-      class="end"
-      @click="stop"
-    >
-      停止测试
-    </button>
+    <button v-show="config.isStart" class="end" @click="stop">停止测试</button>
   </div>
   <div id="terminal" />
 </template>
@@ -135,6 +128,9 @@ function stop() {
   margin: 60px auto;
   max-width: 700px;
 }
+#app h2{
+  margin-top: 0;
+}
 fieldset {
   margin: 10px;
   padding: 10px;