test.mjs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import { io } from "socket.io-client";
  2. import customParser from "socket.io-msgpack-parser";
  3. const url = process.argv[2];
  4. const count = process.argv[3];
  5. const userStartId = process.argv[4];
  6. const testSceneNum = process.argv[5] || "t-test";
  7. const roomId = process.argv[6] || "00001";
  8. const isMockCamera = process.argv[7] || 0;
  9. const cameraInterval = process.argv[8] || 3000;
  10. let testCamera;
  11. console.log(
  12. "argv:",
  13. userStartId,
  14. testSceneNum,
  15. roomId,
  16. isMockCamera,
  17. cameraInterval
  18. );
  19. console.log("socket-info::url:config-->", url);
  20. console.log("socket-info::url:count-->", count);
  21. console.log("socket-info::start-->压力测试正在开始");
  22. const URL = url || process.env.URL;
  23. // http://zhang9394@zhangyupeng:face3d.4dage.com:7005/zhangyupeng/chatIM.git
  24. const MAX_CLIENTS = Number(count) || 500;
  25. const CLIENT_CREATION_INTERVAL_IN_MS = 10;
  26. const EMIT_INTERVAL_IN_MS = 1000;
  27. const EMIT_INTERVAL_IN_MS_camera = cameraInterval;
  28. // wws://test-socket.4dkankan.com/watch
  29. let clientCount = 0;
  30. let lastReport = new Date().getTime();
  31. let packetsSinceLastReport = 0;
  32. // let testSceneNum = "t-test";
  33. // let roomId = "00001";
  34. let userLimitNum = MAX_CLIENTS;
  35. let agentId = 0;
  36. const createAgent = () => {
  37. agentId += 1;
  38. const nickName = `test_name_${userStartId}${agentId}`;
  39. const userId = `${userStartId}${agentId}`;
  40. const oid = `oid-${userStartId}${agentId}`;
  41. const role = agentId === 1 ? "leader" : "customer";
  42. createClient({ userId, nickName, from: "0", role: role, oid });
  43. createClient({ userId, nickName, from: "1", role: role, oid });
  44. createClient({ userId, nickName, from: "2", role: role, oid });
  45. };
  46. const createClient = ({ userId, nickName, from, role, oid }) => {
  47. // for demonstration purposes, some clients stay stuck in HTTP long-polling
  48. const socket = io(URL, {
  49. path: "/fsl-node",
  50. transports: ["websocket"],
  51. parser: customParser,
  52. extraHeaders: {
  53. oid: oid,
  54. },
  55. query: {
  56. userId: userId,
  57. from: from || 2,
  58. sceneNum: testSceneNum,
  59. role: role,
  60. nickName: nickName,
  61. roomId: roomId,
  62. voiceStatus: 0,
  63. enableTalk: true,
  64. isAuthMic: 0,
  65. isAllowMic: 0,
  66. userLimitNum,
  67. myHeadUrl:
  68. "http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg",
  69. },
  70. });
  71. if (Number(isMockCamera) === 1) {
  72. setInterval(() => {
  73. const data = {
  74. testUserId: userId,
  75. item: {
  76. qua: {
  77. _x: -0.11495106988815072,
  78. _y: 0.13408027376477993,
  79. _z: 0.015660797097947755,
  80. _w: 0.9841562229407423,
  81. },
  82. mode: "panorama",
  83. pos: {
  84. x: 1.7477431297302246,
  85. y: -0.1338435709476471,
  86. z: 1.3797638416290283,
  87. },
  88. type: "Rotate",
  89. pano: "1",
  90. target: {
  91. x: 1.4874317088952322,
  92. y: -0.3643028004004215,
  93. z: 0.442146378191566,
  94. },
  95. },
  96. };
  97. socket.emit("client-benmark-server", data);
  98. }, EMIT_INTERVAL_IN_MS_camera);
  99. }
  100. setInterval(() => {
  101. socket.emit("client to server event");
  102. }, EMIT_INTERVAL_IN_MS);
  103. socket.on("server-benmark-client", (data) => {
  104. packetsSinceLastReport++;
  105. testCamera = data;
  106. // console.log("客户端收到服务端-镜头-MOCK", data);
  107. });
  108. // socket.emit("server-interval-room-broadcast", { time: 1000 });
  109. // socket.on("client-interval-room-broadcast", (data) => {
  110. // console.log(`客户端${userId}收到房间播报-MOCK"`, data);
  111. // });
  112. socket.on("server to client event", () => {
  113. packetsSinceLastReport++;
  114. });
  115. socket.on("disconnect", (reason) => {
  116. console.log(`disconnect due to ${reason}`);
  117. });
  118. if (++clientCount < MAX_CLIENTS) {
  119. setTimeout(createAgent, CLIENT_CREATION_INTERVAL_IN_MS);
  120. }
  121. };
  122. createAgent();
  123. const printReport = () => {
  124. const now = new Date().getTime();
  125. const durationSinceLastReport = (now - lastReport) / 1000;
  126. const packetsPerSeconds = (
  127. packetsSinceLastReport / durationSinceLastReport
  128. ).toFixed(2);
  129. console.log(
  130. `client count: ${clientCount} ; average packets received per second: ${packetsPerSeconds} ${
  131. testCamera ? " carmera:" + JSON.stringify(testCamera) : ""
  132. }`
  133. );
  134. packetsSinceLastReport = 0;
  135. lastReport = now;
  136. };
  137. setInterval(printReport, 5000);