qxj 1 місяць тому
батько
коміт
74e7aeacf7
5 змінених файлів з 130 додано та 579 видалено
  1. 0 3
      common/request.js
  2. 6 565
      package-lock.json
  3. 2 1
      package.json
  4. 6 10
      pages_course/living.vue
  5. 116 0
      ws-load-test.js

+ 0 - 3
common/request.js

@@ -9,7 +9,6 @@ export default class Request {
 		// let path = 'http://192.168.10.126:7014';
 		// let path = 'https://live.test.ylrztop.com/live-api'; // 余红奇
 		// let path = 'http://192.168.10.166:7014'; // 余红奇
-
 		let token = "";
 		let type = 0
 		if (url != null) {
@@ -33,8 +32,6 @@ export default class Request {
 		if (router.indexOf("/live/liveData/like") != -1) {
 			path = 'https://im.fhhx.runtzh.com';
 		}
-		
-		
 		// uni.showLoading({
 		// 	title: '加载中'
 		// });

+ 6 - 565
package-lock.json

@@ -1,509 +1,14 @@
 {
     "name": "shop",
     "version": "1.0.0",
-    "lockfileVersion": 2,
+    "lockfileVersion": 1,
     "requires": true,
-    "packages": {
-        "": {
-            "name": "shop",
-            "version": "1.0.0",
-            "license": "ISC",
-            "dependencies": {
-                "animate.css": "^3.7.2",
-                "cos-wx-sdk-v5": "^1.0.10",
-                "crypto": "^1.0.1",
-                "crypto-js": "^4.2.0",
-                "dayjs": "^1.11.18",
-                "hls": "0.0.1",
-                "tim-wx-sdk": "^2.17.0",
-                "vuex": "^4.1.0"
-            },
-            "devDependencies": {}
-        },
-        "node_modules/@babel/helper-string-parser": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-            "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-            "peer": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-validator-identifier": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
-            "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
-            "peer": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/parser": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
-            "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
-            "peer": true,
-            "dependencies": {
-                "@babel/types": "^7.28.5"
-            },
-            "bin": {
-                "parser": "bin/babel-parser.js"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
-        "node_modules/@babel/types": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
-            "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
-            "peer": true,
-            "dependencies": {
-                "@babel/helper-string-parser": "^7.27.1",
-                "@babel/helper-validator-identifier": "^7.28.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@jridgewell/sourcemap-codec": {
-            "version": "1.5.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
-            "peer": true
-        },
-        "node_modules/@vue/compiler-core": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
-            "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
-            "peer": true,
-            "dependencies": {
-                "@babel/parser": "^7.28.4",
-                "@vue/shared": "3.5.22",
-                "entities": "^4.5.0",
-                "estree-walker": "^2.0.2",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "node_modules/@vue/compiler-dom": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
-            "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-core": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "node_modules/@vue/compiler-sfc": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz",
-            "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
-            "peer": true,
-            "dependencies": {
-                "@babel/parser": "^7.28.4",
-                "@vue/compiler-core": "3.5.22",
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/compiler-ssr": "3.5.22",
-                "@vue/shared": "3.5.22",
-                "estree-walker": "^2.0.2",
-                "magic-string": "^0.30.19",
-                "postcss": "^8.5.6",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "node_modules/@vue/compiler-ssr": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz",
-            "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "node_modules/@vue/devtools-api": {
-            "version": "6.6.4",
-            "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
-            "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
-        },
-        "node_modules/@vue/reactivity": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz",
-            "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==",
-            "peer": true,
-            "dependencies": {
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "node_modules/@vue/runtime-core": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz",
-            "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==",
-            "peer": true,
-            "dependencies": {
-                "@vue/reactivity": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "node_modules/@vue/runtime-dom": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz",
-            "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==",
-            "peer": true,
-            "dependencies": {
-                "@vue/reactivity": "3.5.22",
-                "@vue/runtime-core": "3.5.22",
-                "@vue/shared": "3.5.22",
-                "csstype": "^3.1.3"
-            }
-        },
-        "node_modules/@vue/server-renderer": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz",
-            "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-ssr": "3.5.22",
-                "@vue/shared": "3.5.22"
-            },
-            "peerDependencies": {
-                "vue": "3.5.22"
-            }
-        },
-        "node_modules/@vue/shared": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz",
-            "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==",
-            "peer": true
-        },
-        "node_modules/animate.css": {
-            "version": "3.7.2",
-            "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.7.2.tgz",
-            "integrity": "sha512-0bE8zYo7C0KvgOYrSVfrzkbYk6IOTVPNqkiHg2cbyF4Pq/PXzilz4BRWA3hwEUBoMp5VBgrC29lQIZyhRWdBTw=="
-        },
-        "node_modules/cos-wx-sdk-v5": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/cos-wx-sdk-v5/-/cos-wx-sdk-v5-1.1.5.tgz",
-            "integrity": "sha512-++O7HD6Hz6UDlhgKMchJOap85bQtY+DKzPg2r5uCdyRb45AWC+Xj9qetXohPpA2G/inNVSqxw/EtjGPe2OIhyg==",
-            "dependencies": {
-                "mime": "^2.4.6",
-                "xmldom": "^0.1.31"
-            }
-        },
-        "node_modules/crypto": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
-            "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
-            "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
-        },
-        "node_modules/crypto-js": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
-            "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
-        },
-        "node_modules/csstype": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-            "peer": true
-        },
-        "node_modules/dayjs": {
-            "version": "1.11.18",
-            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz",
-            "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA=="
-        },
-        "node_modules/entities": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-            "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-            "peer": true,
-            "engines": {
-                "node": ">=0.12"
-            },
-            "funding": {
-                "url": "https://github.com/fb55/entities?sponsor=1"
-            }
-        },
-        "node_modules/estree-walker": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-            "peer": true
-        },
-        "node_modules/hls": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/hls/-/hls-0.0.1.tgz",
-            "integrity": "sha512-ov6aIzckaDCdFFAeJbrmZYhAR0O7w+nDXh3fz9XEcf8P6EercldLht/23JHRFXmAMtvKw8dzuOCafzktdV1AZw=="
-        },
-        "node_modules/magic-string": {
-            "version": "0.30.21",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-            "peer": true,
-            "dependencies": {
-                "@jridgewell/sourcemap-codec": "^1.5.5"
-            }
-        },
-        "node_modules/mime": {
-            "version": "2.6.0",
-            "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
-            "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
-            "bin": {
-                "mime": "cli.js"
-            },
-            "engines": {
-                "node": ">=4.0.0"
-            }
-        },
-        "node_modules/nanoid": {
-            "version": "3.3.11",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-            "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-            "funding": [
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "peer": true,
-            "bin": {
-                "nanoid": "bin/nanoid.cjs"
-            },
-            "engines": {
-                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-            }
-        },
-        "node_modules/picocolors": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-            "peer": true
-        },
-        "node_modules/postcss": {
-            "version": "8.5.6",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
-            "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
-            "funding": [
-                {
-                    "type": "opencollective",
-                    "url": "https://opencollective.com/postcss/"
-                },
-                {
-                    "type": "tidelift",
-                    "url": "https://tidelift.com/funding/github/npm/postcss"
-                },
-                {
-                    "type": "github",
-                    "url": "https://github.com/sponsors/ai"
-                }
-            ],
-            "peer": true,
-            "dependencies": {
-                "nanoid": "^3.3.11",
-                "picocolors": "^1.1.1",
-                "source-map-js": "^1.2.1"
-            },
-            "engines": {
-                "node": "^10 || ^12 || >=14"
-            }
-        },
-        "node_modules/source-map-js": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-            "peer": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/tim-wx-sdk": {
-            "version": "2.18.0",
-            "resolved": "https://registry.npmjs.org/tim-wx-sdk/-/tim-wx-sdk-2.18.0.tgz",
-            "integrity": "sha512-Dz6aHpaCdk1ST/ZzltliSFHBsB5CdFU+q2NpFZc9PV8br0a5F2GyYgrdLn1Yqt8YntEwMReaud3LUY638zNJug=="
-        },
-        "node_modules/vue": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz",
-            "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/compiler-sfc": "3.5.22",
-                "@vue/runtime-dom": "3.5.22",
-                "@vue/server-renderer": "3.5.22",
-                "@vue/shared": "3.5.22"
-            },
-            "peerDependencies": {
-                "typescript": "*"
-            },
-            "peerDependenciesMeta": {
-                "typescript": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/vuex": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
-            "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
-            "dependencies": {
-                "@vue/devtools-api": "^6.0.0-beta.11"
-            },
-            "peerDependencies": {
-                "vue": "^3.2.0"
-            }
-        },
-        "node_modules/xmldom": {
-            "version": "0.1.31",
-            "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
-            "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
-            "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0",
-            "engines": {
-                "node": ">=0.1"
-            }
-        }
-    },
     "dependencies": {
-        "@babel/helper-string-parser": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-            "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-            "peer": true
-        },
-        "@babel/helper-validator-identifier": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
-            "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
-            "peer": true
-        },
-        "@babel/parser": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
-            "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
-            "peer": true,
-            "requires": {
-                "@babel/types": "^7.28.5"
-            }
-        },
-        "@babel/types": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
-            "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
-            "peer": true,
-            "requires": {
-                "@babel/helper-string-parser": "^7.27.1",
-                "@babel/helper-validator-identifier": "^7.28.5"
-            }
-        },
-        "@jridgewell/sourcemap-codec": {
-            "version": "1.5.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
-            "peer": true
-        },
-        "@vue/compiler-core": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
-            "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
-            "peer": true,
-            "requires": {
-                "@babel/parser": "^7.28.4",
-                "@vue/shared": "3.5.22",
-                "entities": "^4.5.0",
-                "estree-walker": "^2.0.2",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "@vue/compiler-dom": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
-            "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-core": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "@vue/compiler-sfc": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz",
-            "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
-            "peer": true,
-            "requires": {
-                "@babel/parser": "^7.28.4",
-                "@vue/compiler-core": "3.5.22",
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/compiler-ssr": "3.5.22",
-                "@vue/shared": "3.5.22",
-                "estree-walker": "^2.0.2",
-                "magic-string": "^0.30.19",
-                "postcss": "^8.5.6",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "@vue/compiler-ssr": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz",
-            "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
         "@vue/devtools-api": {
             "version": "6.6.4",
             "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
             "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
         },
-        "@vue/reactivity": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz",
-            "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==",
-            "peer": true,
-            "requires": {
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "@vue/runtime-core": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz",
-            "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==",
-            "peer": true,
-            "requires": {
-                "@vue/reactivity": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "@vue/runtime-dom": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz",
-            "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==",
-            "peer": true,
-            "requires": {
-                "@vue/reactivity": "3.5.22",
-                "@vue/runtime-core": "3.5.22",
-                "@vue/shared": "3.5.22",
-                "csstype": "^3.1.3"
-            }
-        },
-        "@vue/server-renderer": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz",
-            "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-ssr": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
-        "@vue/shared": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz",
-            "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==",
-            "peer": true
-        },
         "animate.css": {
             "version": "3.7.2",
             "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.7.2.tgz",
@@ -528,95 +33,26 @@
             "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
             "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
         },
-        "csstype": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-            "peer": true
-        },
         "dayjs": {
             "version": "1.11.18",
             "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz",
             "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA=="
         },
-        "entities": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-            "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-            "peer": true
-        },
-        "estree-walker": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-            "peer": true
-        },
         "hls": {
             "version": "0.0.1",
             "resolved": "https://registry.npmjs.org/hls/-/hls-0.0.1.tgz",
             "integrity": "sha512-ov6aIzckaDCdFFAeJbrmZYhAR0O7w+nDXh3fz9XEcf8P6EercldLht/23JHRFXmAMtvKw8dzuOCafzktdV1AZw=="
         },
-        "magic-string": {
-            "version": "0.30.21",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-            "peer": true,
-            "requires": {
-                "@jridgewell/sourcemap-codec": "^1.5.5"
-            }
-        },
         "mime": {
             "version": "2.6.0",
             "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
             "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
         },
-        "nanoid": {
-            "version": "3.3.11",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-            "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-            "peer": true
-        },
-        "picocolors": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-            "peer": true
-        },
-        "postcss": {
-            "version": "8.5.6",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
-            "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
-            "peer": true,
-            "requires": {
-                "nanoid": "^3.3.11",
-                "picocolors": "^1.1.1",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "source-map-js": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-            "peer": true
-        },
         "tim-wx-sdk": {
             "version": "2.18.0",
             "resolved": "https://registry.npmjs.org/tim-wx-sdk/-/tim-wx-sdk-2.18.0.tgz",
             "integrity": "sha512-Dz6aHpaCdk1ST/ZzltliSFHBsB5CdFU+q2NpFZc9PV8br0a5F2GyYgrdLn1Yqt8YntEwMReaud3LUY638zNJug=="
         },
-        "vue": {
-            "version": "3.5.22",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz",
-            "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-dom": "3.5.22",
-                "@vue/compiler-sfc": "3.5.22",
-                "@vue/runtime-dom": "3.5.22",
-                "@vue/server-renderer": "3.5.22",
-                "@vue/shared": "3.5.22"
-            }
-        },
         "vuex": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
@@ -625,6 +61,11 @@
                 "@vue/devtools-api": "^6.0.0-beta.11"
             }
         },
+        "ws": {
+            "version": "8.18.3",
+            "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz",
+            "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="
+        },
         "xmldom": {
             "version": "0.1.31",
             "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",

+ 2 - 1
package.json

@@ -11,7 +11,8 @@
         "dayjs": "^1.11.18",
         "hls": "0.0.1",
         "tim-wx-sdk": "^2.17.0",
-        "vuex": "^4.1.0"
+        "vuex": "^4.1.0",
+        "ws": "^8.18.3"
     },
     "main": "main.js",
     "scripts": {

+ 6 - 10
pages_course/living.vue

@@ -998,22 +998,18 @@ export default {
 			},
 	onHide() {
 		//  清除所有定时器(使用增强清理)
-		this.clearAllTimersEnhanced();
-		this.stopHeartBeat();
-
+		//this.clearAllTimersEnhanced();
+		//this.stopHeartBeat();
 		// 页面隐藏时清理部分数据,减少内存占用
-		if (this.talklist && this.talklist.length > 20) {
+		if (this.talklist && this.talklist.length > 30) {
 			// 只保留最新的20条消息
-			this.talklist = this.talklist.slice(-20);
+			this.talklist = this.talklist.slice(-30);
 		}
-		
 		// 触发垃圾回收
-		this.triggerGarbageCollection();
+		//this.triggerGarbageCollection();
 	},
 
 	onUnload() {
-	
-		console.log("qxj onUnload");
 		// 保存视频进度
 		this.saveVideoProgress();
 		// 清理直播相关定时器
@@ -2917,9 +2913,9 @@ export default {
 			this.viewLoading = true;
 			try {
 				const res = await watchUserList(this.liveId, this.viewPageSize, this.viewPageNum, false);
+				console.log("qxj getliveUser",res);
 				if (res.code === 200) {
 					const userRows = Array.isArray(res.rows) ? res.rows : [];
-
 					let array = userRows.map((item) => ({
 						avatar: item.avatar || '',
 						userId: item.userId || '',

+ 116 - 0
ws-load-test.js

@@ -0,0 +1,116 @@
+// WebSocket 并发压测(模拟进入直播间+心跳)
+const WebSocket = require('ws');
+const crypto = require('crypto');
+
+const WS_HOST = process.env.WS_HOST || 'wss://ws.klbycp.com/ws/app/webSocket';
+const LIVE_ID = process.env.LIVE_ID;                    // 必填:直播间ID
+const USER_TYPE = parseInt(process.env.USER_TYPE || '0', 10);    // 与前端一致,默认0
+const HEARTBEAT_MS = parseInt(process.env.HB || '15000', 10);    // 心跳间隔
+const RATE = parseInt(process.env.RATE || '80', 10);             // 每秒建链速率
+const DURATION_SEC = parseInt(process.env.DURATION || '600', 10);// 运行总时长(秒)
+
+// 新增:可选 Origin 和扫码参数
+const ORIGIN = process.env.ORIGIN || 'https://im.fhhx.runtzh.com';
+const COMPANY_ID = process.env.COMPANY_ID;
+const COMPANY_USER_ID = process.env.COMPANY_USER_ID;
+
+const UID_START = parseInt(process.env.UID_START || '900000000', 10);
+const UID_TO = parseInt(process.env.UID_TO || '0', 10);
+let COUNT = parseInt(process.env.COUNT || '0', 10);
+
+if (!LIVE_ID) {
+  console.error('缺少 LIVE_ID。示例:LIVE_ID=359 node scripts/ws-load-test.js');
+  process.exit(1);
+}
+if (UID_TO > 0 && UID_TO >= UID_START) {
+  COUNT = UID_TO - UID_START + 1;
+}
+if (!COUNT || COUNT <= 0) {
+  console.error('缺少 COUNT 或 UID_TO,无法确定连接数量');
+  process.exit(1);
+}
+
+function buildUrl(userId) {
+  const ts = Date.now();
+  const message = `${LIVE_ID}${userId}${USER_TYPE}${ts}`;
+  const signature = crypto.createHmac('sha256', String(ts)).update(message).digest('hex');
+  let url = `${WS_HOST}?userId=${userId}&liveId=${LIVE_ID}&userType=${USER_TYPE}&timestamp=${ts}&signature=${signature}`;
+  // 新增:可选扫码来源参数
+  if (COMPANY_ID && COMPANY_USER_ID) {
+    url += `&companyId=${encodeURIComponent(COMPANY_ID)}&companyUserId=${encodeURIComponent(COMPANY_USER_ID)}`;
+  }
+  return url;
+}
+
+const stats = { open: 0, close: 0, error: 0, msg: 0 };
+
+function startClient(index) {
+  const userId = String(UID_START + index);
+  const url = buildUrl(userId);
+  // 新增:传入 origin 头,避免被服务端拒绝
+  const ws = new WebSocket(url, { perMessageDeflate: false, origin: ORIGIN });
+  let hbTimer = null;
+
+  ws.on('open', () => {
+    stats.open++;
+    console.log(`[${userId}] connected`);
+    const sendHb = () => {
+      const now = Date.now();
+      const payload = JSON.stringify({
+        cmd: 'heartbeat',
+        msg: 'ping',
+        userId,
+        liveId: LIVE_ID,
+        timestamp: now,
+        networkType: 'wifi',
+      });
+      ws.send(payload);
+    };
+    // 新增:打开即发送一次心跳, subsequent 定时发送
+    sendHb();
+    hbTimer = setInterval(sendHb, HEARTBEAT_MS);
+  });
+
+  // 新增:打印服务端返回的 cmd,观察是否有 heartbeat/entry/out 等
+  ws.on('message', (msg) => {
+    stats.msg++;
+    try {
+      const parsed = JSON.parse(msg);
+      if (parsed && parsed.data && parsed.data.cmd) {
+        console.log(`[${userId}] recv cmd=${parsed.data.cmd}`);
+      }
+    } catch (_) {}
+  });
+
+  ws.on('error', (err) => {
+    stats.error++;
+    console.error(`[${userId}] error`, err?.message || err);
+    if (hbTimer) clearInterval(hbTimer);
+  });
+
+  ws.on('close', (code, reason) => {
+    stats.close++;
+    console.log(`[${userId}] closed code=${code} reason=${reason || ''}`);
+    if (hbTimer) clearInterval(hbTimer);
+  });
+}
+
+async function run() {
+  console.log(`开始压测: liveId=${LIVE_ID}, count=${COUNT}, rate=${RATE}/s, hb=${HEARTBEAT_MS}ms, uid=[${UID_START}..${UID_START + COUNT - 1}]`);
+  for (let i = 0; i < COUNT; i++) {
+    startClient(i);
+    const delayMs = Math.max(1, Math.floor(1000 / RATE));
+    await new Promise((r) => setTimeout(r, delayMs));
+  }
+  const endAt = Date.now() + DURATION_SEC * 1000;
+  const t = setInterval(() => {
+    console.log(`[stats] open=${stats.open} close=${stats.close} error=${stats.error} msg=${stats.msg}`);
+    if (Date.now() >= endAt) {
+      console.log('压测结束。');
+      clearInterval(t);
+      process.exit(0);
+    }
+  }, 2000);
+}
+
+run().catch((e) => { console.error('运行异常', e); process.exit(1); });