import { io } from "socket.io-client"; import customParser from "socket.io-msgpack-parser"; 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 isMockCamera = process.argv[7] || 0; const cameraInterval = process.argv[8] || 3000; let testCamera; console.log( "argv:", userStartId, testSceneNum, roomId, isMockCamera, cameraInterval ); console.log("socket-info::url:config-->", url); console.log("socket-info::url:count-->", count); 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; // wws://test-socket.4dkankan.com/watch let clientCount = 0; let lastReport = new Date().getTime(); let packetsSinceLastReport = 0; // let testSceneNum = "t-test"; // let roomId = "00001"; let userLimitNum = MAX_CLIENTS; let agentId = 0; const createAgent = () => { agentId += 1; const nickName = `test_name_${userStartId}${agentId}`; 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 createClient = ({ userId, nickName, from, role, oid }) => { // for demonstration purposes, some clients stay stuck in HTTP long-polling const socket = io(URL, { path: "/fsl-node", transports: ["websocket"], parser: customParser, extraHeaders: { oid: oid, }, query: { userId: userId, from: from || 2, sceneNum: testSceneNum, role: role, nickName: nickName, roomId: roomId, voiceStatus: 0, enableTalk: true, isAuthMic: 0, isAllowMic: 0, userLimitNum, myHeadUrl: "http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg", }, }); 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); }); // 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", () => { packetsSinceLastReport++; }); socket.on("disconnect", (reason) => { console.log(`disconnect due to ${reason}`); }); if (++clientCount < MAX_CLIENTS) { setTimeout(createAgent, CLIENT_CREATION_INTERVAL_IN_MS); } }; createAgent(); const printReport = () => { const now = new Date().getTime(); const durationSinceLastReport = (now - lastReport) / 1000; const packetsPerSeconds = ( packetsSinceLastReport / durationSinceLastReport ).toFixed(2); console.log( `client count: ${clientCount} ; average packets received per second: ${packetsPerSeconds} ${ testCamera ? " carmera:" + JSON.stringify(testCamera) : "" }` ); packetsSinceLastReport = 0; lastReport = now; }; setInterval(printReport, 5000);