@lsby/net-core 0.7.24 → 0.7.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/global/global.cjs +19 -0
- package/dist/cjs/global/global.d.cts +2 -0
- package/dist/cjs/index.cjs +27 -7
- package/dist/cjs/plugin/extend/custom-data.cjs +19 -0
- package/dist/cjs/plugin/extend/urlencoded.cjs +19 -0
- package/dist/cjs/plugin/extend/web-socket.cjs +21 -2
- package/dist/cjs/server/server.cjs +25 -5
- package/dist/esm/{chunk-5JL432N6.js → chunk-CGLDW3PN.js} +1 -1
- package/dist/esm/{chunk-FDR5G37J.js → chunk-RSNOS5LV.js} +7 -6
- package/dist/esm/{chunk-YITJBWMM.js → chunk-SWPAN4RD.js} +1 -1
- package/dist/esm/{chunk-VFOG5LBT.js → chunk-VNRSKOGV.js} +1 -1
- package/dist/esm/{chunk-BFL3HOQE.js → chunk-VTVWF3IE.js} +19 -0
- package/dist/esm/global/global.d.ts +2 -0
- package/dist/esm/global/global.js +1 -1
- package/dist/esm/index.js +9 -9
- package/dist/esm/plugin/extend/custom-data.js +2 -2
- package/dist/esm/plugin/extend/urlencoded.js +2 -2
- package/dist/esm/plugin/extend/web-socket.js +2 -2
- package/dist/esm/server/server.js +2 -2
- package/package.json +1 -1
|
@@ -26,13 +26,20 @@ __export(global_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(global_exports);
|
|
27
27
|
var import_ts_global = require("@lsby/ts-global");
|
|
28
28
|
var import_ts_log = require("@lsby/ts-log");
|
|
29
|
+
var import_ws = require("ws");
|
|
29
30
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
30
31
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
31
32
|
constructor(\u8FDE\u63A5\u8868) {
|
|
32
33
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
34
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
35
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
36
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
37
|
+
});
|
|
38
|
+
}, 3e4);
|
|
33
39
|
}
|
|
34
40
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
35
41
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
42
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
36
43
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
37
44
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
38
45
|
}
|
|
@@ -57,6 +64,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
57
64
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
58
65
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
59
66
|
}
|
|
67
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
68
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
69
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
70
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
71
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
72
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
76
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
60
79
|
};
|
|
61
80
|
var Global = new import_ts_global.GlobalService([
|
|
62
81
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -7,12 +7,14 @@ declare class WebSocket管理器 {
|
|
|
7
7
|
private 连接表;
|
|
8
8
|
private log;
|
|
9
9
|
private 清理函数表;
|
|
10
|
+
private 定时器ID;
|
|
10
11
|
constructor(连接表: Record<id, WebSocket | null>);
|
|
11
12
|
增加连接(id: id, ws句柄: WebSocket): void;
|
|
12
13
|
查询连接存在(id: string): boolean;
|
|
13
14
|
设置清理函数(id: string, 清理函数: () => Promise<void>): Promise<void>;
|
|
14
15
|
获得句柄(id: id): Promise<WebSocket | null>;
|
|
15
16
|
删除连接(id: string): void;
|
|
17
|
+
private 清理无效连接;
|
|
16
18
|
}
|
|
17
19
|
declare let Global: GlobalService<[GlobalItem<"log", Log>, GlobalItem<"WebSocket管理器", WebSocket管理器>]>;
|
|
18
20
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -312,13 +312,20 @@ var \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6 = class extends \u63D2\u4EF
|
|
|
312
312
|
// src/global/global.ts
|
|
313
313
|
var import_ts_global = require("@lsby/ts-global");
|
|
314
314
|
var import_ts_log = require("@lsby/ts-log");
|
|
315
|
+
var import_ws = require("ws");
|
|
315
316
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
316
317
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
317
318
|
constructor(\u8FDE\u63A5\u8868) {
|
|
318
319
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
320
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
321
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
322
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
323
|
+
});
|
|
324
|
+
}, 3e4);
|
|
319
325
|
}
|
|
320
326
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
321
327
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
328
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
322
329
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
323
330
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
324
331
|
}
|
|
@@ -343,6 +350,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
343
350
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
344
351
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
345
352
|
}
|
|
353
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
354
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
355
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
356
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
357
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
358
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
362
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
346
365
|
};
|
|
347
366
|
var Global = new import_ts_global.GlobalService([
|
|
348
367
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -480,7 +499,7 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
480
499
|
};
|
|
481
500
|
|
|
482
501
|
// src/plugin/extend/web-socket.ts
|
|
483
|
-
var
|
|
502
|
+
var import_ws2 = require("ws");
|
|
484
503
|
var import_zod4 = require("zod");
|
|
485
504
|
var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
486
505
|
log = Global.getItem("log");
|
|
@@ -514,7 +533,7 @@ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
514
533
|
await log2.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
515
534
|
return;
|
|
516
535
|
}
|
|
517
|
-
if (ws\u53E5\u67C4.readyState !==
|
|
536
|
+
if (ws\u53E5\u67C4.readyState !== import_ws2.WebSocket.OPEN) {
|
|
518
537
|
await log2.warn("WebSocket \u672A\u6253\u5F00\uFF0C\u65E0\u6CD5\u53D1\u9001\u6D88\u606F", { wsId });
|
|
519
538
|
return;
|
|
520
539
|
}
|
|
@@ -548,7 +567,7 @@ var import_express3 = __toESM(require("express"), 1);
|
|
|
548
567
|
var import_promises = require("fs/promises");
|
|
549
568
|
var import_node_os = require("os");
|
|
550
569
|
var import_short_uuid = __toESM(require("short-uuid"), 1);
|
|
551
|
-
var
|
|
570
|
+
var import_ws3 = require("ws");
|
|
552
571
|
var \u670D\u52A1\u5668 = class {
|
|
553
572
|
constructor(\u63A5\u53E3\u4EEC, \u7AEF\u53E3, \u9759\u6001\u8D44\u6E90\u8DEF\u5F84, \u9ED8\u8BA4get\u6587\u4EF6\u8DEF\u5F84) {
|
|
554
573
|
this.\u63A5\u53E3\u4EEC = \u63A5\u53E3\u4EEC;
|
|
@@ -624,14 +643,15 @@ var \u670D\u52A1\u5668 = class {
|
|
|
624
643
|
} else if (\u6B63\u786E\u7ED3\u679C.success === true) {
|
|
625
644
|
\u6700\u7EC8\u7ED3\u679C = \u6B63\u786E\u7ED3\u679C.data;
|
|
626
645
|
} else {
|
|
627
|
-
|
|
646
|
+
let \u7ED3\u679C\u5B57\u7B26\u4E32 = JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u8F6C\u6362\u7ED3\u679C));
|
|
647
|
+
await log2.error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C: ${\u7ED3\u679C\u5B57\u7B26\u4E32}`);
|
|
628
648
|
await log2.error("\u5BF9\u4E8E\u9519\u8BEF\u7ED3\u679C: %o", \u9519\u8BEF\u7ED3\u679C.error);
|
|
629
649
|
await log2.error("\u5BF9\u4E8E\u6B63\u786E\u7ED3\u679C: %o", \u6B63\u786E\u7ED3\u679C.error);
|
|
630
|
-
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C
|
|
650
|
+
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C`);
|
|
631
651
|
}
|
|
632
652
|
let \u8F6C\u6362\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
633
653
|
await log2.info("\u7ED3\u679C\u8F6C\u6362\u4E0E\u6821\u9A8C\u5B8C\u6210, \u8017\u65F6: %o ms", \u8F6C\u6362\u8017\u65F6);
|
|
634
|
-
await log2.debug("\u6700\u7EC8\u7ED3\u679C: %o", \u6700\u7EC8\u7ED3\u679C);
|
|
654
|
+
await log2.debug("\u6700\u7EC8\u7ED3\u679C: %o", JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6700\u7EC8\u7ED3\u679C)));
|
|
635
655
|
\u5F00\u59CB = Date.now();
|
|
636
656
|
await \u7ED3\u679C\u8FD4\u56DE\u5668.\u8FD4\u56DE(req, res, \u6700\u7EC8\u7ED3\u679C);
|
|
637
657
|
let \u8FD4\u56DE\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
@@ -640,7 +660,7 @@ var \u670D\u52A1\u5668 = class {
|
|
|
640
660
|
await log2.info("\u63A5\u53E3\u5B8C\u6574\u6267\u884C\u8017\u65F6: %o ms", \u603B\u8017\u65F6);
|
|
641
661
|
}
|
|
642
662
|
async \u521D\u59CB\u5316WebSocket(server) {
|
|
643
|
-
let wss = new
|
|
663
|
+
let wss = new import_ws3.WebSocketServer({ server });
|
|
644
664
|
let logBase = await this.log;
|
|
645
665
|
wss.on("listening", async () => {
|
|
646
666
|
let log2 = logBase;
|
|
@@ -27,13 +27,20 @@ module.exports = __toCommonJS(custom_data_exports);
|
|
|
27
27
|
// src/global/global.ts
|
|
28
28
|
var import_ts_global = require("@lsby/ts-global");
|
|
29
29
|
var import_ts_log = require("@lsby/ts-log");
|
|
30
|
+
var import_ws = require("ws");
|
|
30
31
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
31
32
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
32
33
|
constructor(\u8FDE\u63A5\u8868) {
|
|
33
34
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
35
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
36
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
37
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
38
|
+
});
|
|
39
|
+
}, 3e4);
|
|
34
40
|
}
|
|
35
41
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
36
42
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
43
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
37
44
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
38
45
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
39
46
|
}
|
|
@@ -58,6 +65,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
58
65
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
59
66
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
60
67
|
}
|
|
68
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
69
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
70
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
71
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
72
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
73
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
77
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
61
80
|
};
|
|
62
81
|
var Global = new import_ts_global.GlobalService([
|
|
63
82
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -39,13 +39,20 @@ var import_node_util = require("util");
|
|
|
39
39
|
// src/global/global.ts
|
|
40
40
|
var import_ts_global = require("@lsby/ts-global");
|
|
41
41
|
var import_ts_log = require("@lsby/ts-log");
|
|
42
|
+
var import_ws = require("ws");
|
|
42
43
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
43
44
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
44
45
|
constructor(\u8FDE\u63A5\u8868) {
|
|
45
46
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
47
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
48
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
49
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
50
|
+
});
|
|
51
|
+
}, 3e4);
|
|
46
52
|
}
|
|
47
53
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
48
54
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
55
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
49
56
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
50
57
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
51
58
|
}
|
|
@@ -70,6 +77,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
70
77
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
71
78
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
72
79
|
}
|
|
80
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
81
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
82
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
83
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
84
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
85
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
89
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
73
92
|
};
|
|
74
93
|
var Global = new import_ts_global.GlobalService([
|
|
75
94
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -23,19 +23,26 @@ __export(web_socket_exports, {
|
|
|
23
23
|
WebSocket\u63D2\u4EF6: () => WebSocket\u63D2\u4EF6
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(web_socket_exports);
|
|
26
|
-
var
|
|
26
|
+
var import_ws2 = require("ws");
|
|
27
27
|
var import_zod = require("zod");
|
|
28
28
|
|
|
29
29
|
// src/global/global.ts
|
|
30
30
|
var import_ts_global = require("@lsby/ts-global");
|
|
31
31
|
var import_ts_log = require("@lsby/ts-log");
|
|
32
|
+
var import_ws = require("ws");
|
|
32
33
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
33
34
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
34
35
|
constructor(\u8FDE\u63A5\u8868) {
|
|
35
36
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
37
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
38
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
39
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
40
|
+
});
|
|
41
|
+
}, 3e4);
|
|
36
42
|
}
|
|
37
43
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
38
44
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
45
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
39
46
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
40
47
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
41
48
|
}
|
|
@@ -60,6 +67,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
60
67
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
61
68
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
62
69
|
}
|
|
70
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
71
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
72
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
73
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
74
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
75
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
79
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
63
82
|
};
|
|
64
83
|
var Global = new import_ts_global.GlobalService([
|
|
65
84
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -113,7 +132,7 @@ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
113
132
|
await log2.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
114
133
|
return;
|
|
115
134
|
}
|
|
116
|
-
if (ws\u53E5\u67C4.readyState !==
|
|
135
|
+
if (ws\u53E5\u67C4.readyState !== import_ws2.WebSocket.OPEN) {
|
|
117
136
|
await log2.warn("WebSocket \u672A\u6253\u5F00\uFF0C\u65E0\u6CD5\u53D1\u9001\u6D88\u606F", { wsId });
|
|
118
137
|
return;
|
|
119
138
|
}
|
|
@@ -37,18 +37,25 @@ var import_express = __toESM(require("express"), 1);
|
|
|
37
37
|
var import_promises = require("fs/promises");
|
|
38
38
|
var import_node_os = require("os");
|
|
39
39
|
var import_short_uuid = __toESM(require("short-uuid"), 1);
|
|
40
|
-
var
|
|
40
|
+
var import_ws2 = require("ws");
|
|
41
41
|
|
|
42
42
|
// src/global/global.ts
|
|
43
43
|
var import_ts_global = require("@lsby/ts-global");
|
|
44
44
|
var import_ts_log = require("@lsby/ts-log");
|
|
45
|
+
var import_ws = require("ws");
|
|
45
46
|
var log = new import_ts_log.Log("@lsby:net-core");
|
|
46
47
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
47
48
|
constructor(\u8FDE\u63A5\u8868) {
|
|
48
49
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
50
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
51
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
52
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
53
|
+
});
|
|
54
|
+
}, 3e4);
|
|
49
55
|
}
|
|
50
56
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
51
57
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
58
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
52
59
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
53
60
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
54
61
|
}
|
|
@@ -73,6 +80,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
73
80
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
74
81
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
75
82
|
}
|
|
83
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
84
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
85
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
86
|
+
if (ws === null || ws.readyState === import_ws.WebSocket.CLOSED) {
|
|
87
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
88
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
92
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
76
95
|
};
|
|
77
96
|
var Global = new import_ts_global.GlobalService([
|
|
78
97
|
new import_ts_global.GlobalItem("log", log),
|
|
@@ -174,14 +193,15 @@ var \u670D\u52A1\u5668 = class {
|
|
|
174
193
|
} else if (\u6B63\u786E\u7ED3\u679C.success === true) {
|
|
175
194
|
\u6700\u7EC8\u7ED3\u679C = \u6B63\u786E\u7ED3\u679C.data;
|
|
176
195
|
} else {
|
|
177
|
-
|
|
196
|
+
let \u7ED3\u679C\u5B57\u7B26\u4E32 = JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u8F6C\u6362\u7ED3\u679C));
|
|
197
|
+
await log2.error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C: ${\u7ED3\u679C\u5B57\u7B26\u4E32}`);
|
|
178
198
|
await log2.error("\u5BF9\u4E8E\u9519\u8BEF\u7ED3\u679C: %o", \u9519\u8BEF\u7ED3\u679C.error);
|
|
179
199
|
await log2.error("\u5BF9\u4E8E\u6B63\u786E\u7ED3\u679C: %o", \u6B63\u786E\u7ED3\u679C.error);
|
|
180
|
-
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C
|
|
200
|
+
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C`);
|
|
181
201
|
}
|
|
182
202
|
let \u8F6C\u6362\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
183
203
|
await log2.info("\u7ED3\u679C\u8F6C\u6362\u4E0E\u6821\u9A8C\u5B8C\u6210, \u8017\u65F6: %o ms", \u8F6C\u6362\u8017\u65F6);
|
|
184
|
-
await log2.debug("\u6700\u7EC8\u7ED3\u679C: %o", \u6700\u7EC8\u7ED3\u679C);
|
|
204
|
+
await log2.debug("\u6700\u7EC8\u7ED3\u679C: %o", JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6700\u7EC8\u7ED3\u679C)));
|
|
185
205
|
\u5F00\u59CB = Date.now();
|
|
186
206
|
await \u7ED3\u679C\u8FD4\u56DE\u5668.\u8FD4\u56DE(req, res, \u6700\u7EC8\u7ED3\u679C);
|
|
187
207
|
let \u8FD4\u56DE\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
@@ -190,7 +210,7 @@ var \u670D\u52A1\u5668 = class {
|
|
|
190
210
|
await log2.info("\u63A5\u53E3\u5B8C\u6574\u6267\u884C\u8017\u65F6: %o ms", \u603B\u8017\u65F6);
|
|
191
211
|
}
|
|
192
212
|
async \u521D\u59CB\u5316WebSocket(server) {
|
|
193
|
-
let wss = new
|
|
213
|
+
let wss = new import_ws2.WebSocketServer({ server });
|
|
194
214
|
let logBase = await this.log;
|
|
195
215
|
wss.on("listening", async () => {
|
|
196
216
|
let log2 = logBase;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Global
|
|
3
|
-
} from "./chunk-BFL3HOQE.js";
|
|
4
1
|
import {
|
|
5
2
|
递归截断字符串
|
|
6
3
|
} from "./chunk-ZIVQ3WZA.js";
|
|
4
|
+
import {
|
|
5
|
+
Global
|
|
6
|
+
} from "./chunk-VTVWF3IE.js";
|
|
7
7
|
|
|
8
8
|
// src/server/server.ts
|
|
9
9
|
import express from "express";
|
|
@@ -86,14 +86,15 @@ var \u670D\u52A1\u5668 = class {
|
|
|
86
86
|
} else if (\u6B63\u786E\u7ED3\u679C.success === true) {
|
|
87
87
|
\u6700\u7EC8\u7ED3\u679C = \u6B63\u786E\u7ED3\u679C.data;
|
|
88
88
|
} else {
|
|
89
|
-
|
|
89
|
+
let \u7ED3\u679C\u5B57\u7B26\u4E32 = JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u8F6C\u6362\u7ED3\u679C));
|
|
90
|
+
await log.error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C: ${\u7ED3\u679C\u5B57\u7B26\u4E32}`);
|
|
90
91
|
await log.error("\u5BF9\u4E8E\u9519\u8BEF\u7ED3\u679C: %o", \u9519\u8BEF\u7ED3\u679C.error);
|
|
91
92
|
await log.error("\u5BF9\u4E8E\u6B63\u786E\u7ED3\u679C: %o", \u6B63\u786E\u7ED3\u679C.error);
|
|
92
|
-
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C
|
|
93
|
+
throw new Error(`\u8F6C\u6362\u7ED3\u679C\u65E0\u6CD5\u901A\u8FC7\u6821\u9A8C`);
|
|
93
94
|
}
|
|
94
95
|
let \u8F6C\u6362\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
95
96
|
await log.info("\u7ED3\u679C\u8F6C\u6362\u4E0E\u6821\u9A8C\u5B8C\u6210, \u8017\u65F6: %o ms", \u8F6C\u6362\u8017\u65F6);
|
|
96
|
-
await log.debug("\u6700\u7EC8\u7ED3\u679C: %o", \u6700\u7EC8\u7ED3\u679C);
|
|
97
|
+
await log.debug("\u6700\u7EC8\u7ED3\u679C: %o", JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6700\u7EC8\u7ED3\u679C)));
|
|
97
98
|
\u5F00\u59CB = Date.now();
|
|
98
99
|
await \u7ED3\u679C\u8FD4\u56DE\u5668.\u8FD4\u56DE(req, res, \u6700\u7EC8\u7ED3\u679C);
|
|
99
100
|
let \u8FD4\u56DE\u8017\u65F6 = Date.now() - \u5F00\u59CB;
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
// src/global/global.ts
|
|
2
2
|
import { GlobalItem, GlobalService } from "@lsby/ts-global";
|
|
3
3
|
import { Log } from "@lsby/ts-log";
|
|
4
|
+
import { WebSocket } from "ws";
|
|
4
5
|
var log = new Log("@lsby:net-core");
|
|
5
6
|
var WebSocket\u7BA1\u7406\u5668 = class {
|
|
6
7
|
constructor(\u8FDE\u63A5\u8868) {
|
|
7
8
|
this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
|
|
9
|
+
this.\u5B9A\u65F6\u5668ID = setInterval(() => {
|
|
10
|
+
this.\u6E05\u7406\u65E0\u6548\u8FDE\u63A5().catch((err) => {
|
|
11
|
+
this.log.errorSync(`\u6E05\u7406\u65E0\u6548\u8FDE\u63A5\u5931\u8D25: ${err}`);
|
|
12
|
+
});
|
|
13
|
+
}, 3e4);
|
|
8
14
|
}
|
|
9
15
|
log = log.extend("@lsby:net-core").extend("WebSocket\u7BA1\u7406\u5668");
|
|
10
16
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
17
|
+
\u5B9A\u65F6\u5668ID = null;
|
|
11
18
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
12
19
|
this.\u8FDE\u63A5\u8868[id] = ws\u53E5\u67C4;
|
|
13
20
|
}
|
|
@@ -32,6 +39,18 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
32
39
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
33
40
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
34
41
|
}
|
|
42
|
+
async \u6E05\u7406\u65E0\u6548\u8FDE\u63A5() {
|
|
43
|
+
let \u6E05\u7406\u6570\u91CF = 0;
|
|
44
|
+
for (let [id, ws] of Object.entries(this.\u8FDE\u63A5\u8868)) {
|
|
45
|
+
if (ws === null || ws.readyState === WebSocket.CLOSED) {
|
|
46
|
+
this.\u5220\u9664\u8FDE\u63A5(id);
|
|
47
|
+
\u6E05\u7406\u6570\u91CF++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (\u6E05\u7406\u6570\u91CF > 0) {
|
|
51
|
+
this.log.infoSync(`\u6E05\u7406\u4E86 ${\u6E05\u7406\u6570\u91CF} \u4E2A\u65E0\u6548 WebSocket \u8FDE\u63A5`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
35
54
|
};
|
|
36
55
|
var Global = new GlobalService([
|
|
37
56
|
new GlobalItem("log", log),
|
|
@@ -7,12 +7,14 @@ declare class WebSocket管理器 {
|
|
|
7
7
|
private 连接表;
|
|
8
8
|
private log;
|
|
9
9
|
private 清理函数表;
|
|
10
|
+
private 定时器ID;
|
|
10
11
|
constructor(连接表: Record<id, WebSocket | null>);
|
|
11
12
|
增加连接(id: id, ws句柄: WebSocket): void;
|
|
12
13
|
查询连接存在(id: string): boolean;
|
|
13
14
|
设置清理函数(id: string, 清理函数: () => Promise<void>): Promise<void>;
|
|
14
15
|
获得句柄(id: id): Promise<WebSocket | null>;
|
|
15
16
|
删除连接(id: string): void;
|
|
17
|
+
private 清理无效连接;
|
|
16
18
|
}
|
|
17
19
|
declare let Global: GlobalService<[GlobalItem<"log", Log>, GlobalItem<"WebSocket管理器", WebSocket管理器>]>;
|
|
18
20
|
|
package/dist/esm/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
WebSocket插件
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CGLDW3PN.js";
|
|
4
4
|
import {
|
|
5
5
|
中文路径支持插件
|
|
6
6
|
} from "./chunk-4BFNDHRC.js";
|
|
7
7
|
import {
|
|
8
8
|
自定义数据插件
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VNRSKOGV.js";
|
|
10
10
|
import {
|
|
11
11
|
JSON解析插件
|
|
12
12
|
} from "./chunk-GMYXAJS3.js";
|
|
@@ -21,10 +21,8 @@ import {
|
|
|
21
21
|
} from "./chunk-RRUUWHTF.js";
|
|
22
22
|
import {
|
|
23
23
|
表单解析插件
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import
|
|
26
|
-
常用延时直接形式接口封装
|
|
27
|
-
} from "./chunk-JXTWTY2S.js";
|
|
24
|
+
} from "./chunk-SWPAN4RD.js";
|
|
25
|
+
import "./chunk-XPFEAXE4.js";
|
|
28
26
|
import {
|
|
29
27
|
接口测试
|
|
30
28
|
} from "./chunk-N7TPWCQ5.js";
|
|
@@ -33,28 +31,30 @@ import {
|
|
|
33
31
|
} from "./chunk-43GZE5YL.js";
|
|
34
32
|
import {
|
|
35
33
|
服务器
|
|
36
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-RSNOS5LV.js";
|
|
37
35
|
import {
|
|
38
36
|
EXPORT_TYPE
|
|
39
37
|
} from "./chunk-ZF7EC2OM.js";
|
|
40
|
-
import "./chunk-XPFEAXE4.js";
|
|
41
38
|
import {
|
|
42
39
|
常用形式并自定义返回接口封装
|
|
43
40
|
} from "./chunk-LZOZF4CS.js";
|
|
44
41
|
import {
|
|
45
42
|
常用形式接口封装
|
|
46
43
|
} from "./chunk-WECMWUFB.js";
|
|
44
|
+
import {
|
|
45
|
+
常用延时直接形式接口封装
|
|
46
|
+
} from "./chunk-JXTWTY2S.js";
|
|
47
47
|
import {
|
|
48
48
|
常用返回器,
|
|
49
49
|
接口结果返回器,
|
|
50
50
|
自定义返回器
|
|
51
51
|
} from "./chunk-XBAKTT6S.js";
|
|
52
|
-
import "./chunk-BFL3HOQE.js";
|
|
53
52
|
import {
|
|
54
53
|
构造元组,
|
|
55
54
|
构造对象
|
|
56
55
|
} from "./chunk-YMH6HJJF.js";
|
|
57
56
|
import "./chunk-ZIVQ3WZA.js";
|
|
57
|
+
import "./chunk-VTVWF3IE.js";
|
|
58
58
|
import {
|
|
59
59
|
接口
|
|
60
60
|
} from "./chunk-MDUWXEQ7.js";
|