@fastcar/template-microservices 1.0.0
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/LICENSE +21 -0
- package/README.md +124 -0
- package/package.json +35 -0
- package/template/.prettierrc +9 -0
- package/template/.vscode/launch.json +183 -0
- package/template/README.md +1 -0
- package/template/package.json +47 -0
- package/template/resource/application-dev.yml +56 -0
- package/template/resource/application.yml +2 -0
- package/template/src/annotation/AuthServiceRole.ts +76 -0
- package/template/src/annotation/EnableHotConfig.ts +13 -0
- package/template/src/app-node.ts +94 -0
- package/template/src/app-pm2.ts +191 -0
- package/template/src/common/Code.ts +26 -0
- package/template/src/common/Constant.ts +28 -0
- package/template/src/common/Result.ts +40 -0
- package/template/src/common/TaskAsync.ts +17 -0
- package/template/src/hotconfig/ExampleConfigService.ts +29 -0
- package/template/src/hotconfig/HotConfigInterface.ts +43 -0
- package/template/src/middleware/checkForm.ts +20 -0
- package/template/src/middleware/checkLogin.ts +25 -0
- package/template/src/middleware/parseSession.ts +44 -0
- package/template/src/servers/base/BaseServer.ts +120 -0
- package/template/src/servers/base/common/BackSessionEntryController.ts +33 -0
- package/template/src/servers/base/common/RemoteController.ts +70 -0
- package/template/src/servers/base/service/BackSessionService.ts +97 -0
- package/template/src/servers/base/service/CenterClient.ts +457 -0
- package/template/src/servers/base/service/DataService.ts +85 -0
- package/template/src/servers/base/service/RouterService.ts +185 -0
- package/template/src/servers/center/app.ts +14 -0
- package/template/src/servers/center/controller/EntryController.ts +89 -0
- package/template/src/servers/center/controller/ServerController.ts +62 -0
- package/template/src/servers/center/service/ServerManager.ts +336 -0
- package/template/src/servers/chat/RoomHandler.ts +65 -0
- package/template/src/servers/chat/RoomService.ts +24 -0
- package/template/src/servers/chat/app.ts +11 -0
- package/template/src/servers/connector/app.ts +13 -0
- package/template/src/servers/connector/controller/AccountHandler.ts +80 -0
- package/template/src/servers/connector/controller/ChannelRemote.ts +63 -0
- package/template/src/servers/connector/middleware/forwardMsg.ts +54 -0
- package/template/src/servers/web/HelloController.ts +51 -0
- package/template/src/servers/web/SyncConfigService.ts +13 -0
- package/template/src/servers/web/app.ts +15 -0
- package/template/src/types/ClientSimpleSession.ts +3 -0
- package/template/src/types/ForwardRpcContext.ts +3 -0
- package/template/src/types/ReqSession.ts +8 -0
- package/template/src/types/ResultType.ts +5 -0
- package/template/src/types/ServerMeta.ts +48 -0
- package/template/src/types/SessionAttribute.ts +13 -0
- package/template/src/utils/ConnectorUtils.ts +25 -0
- package/template/src/utils/MicroservicesUtils.ts +101 -0
- package/template/src/utils/NetWork.ts +31 -0
- package/template/src/utils/SessionUtil.ts +46 -0
- package/template/test/connector-test.ts +64 -0
- package/template/test/hello.ts +71 -0
- package/template/tsconfig.json +39 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SessionAttribute } from "@/types/SessionAttribute";
|
|
2
|
+
import { ValidationUtil } from "@fastcar/core/utils";
|
|
3
|
+
|
|
4
|
+
export default class SessionUtil {
|
|
5
|
+
static createSessionByUid({ uid, serviceId, serverType, tid }: { uid?: number; serviceId?: string; serverType?: string; tid?: string }) {
|
|
6
|
+
let settings = new Map();
|
|
7
|
+
if (ValidationUtil.isNumber(uid)) {
|
|
8
|
+
settings.set(SessionAttribute.uid, uid);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (ValidationUtil.isNotNull(serviceId)) {
|
|
12
|
+
settings.set(SessionAttribute.serviceId, serviceId);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (ValidationUtil.isNotNull(serverType)) {
|
|
16
|
+
settings.set(SessionAttribute.serverType, serverType);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (ValidationUtil.isNotNull(tid)) {
|
|
20
|
+
settings.set(SessionAttribute.tid, tid);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
settings.set(SessionAttribute.logged, true);
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
serverId: "",
|
|
27
|
+
sessionId: "",
|
|
28
|
+
settings,
|
|
29
|
+
connectedTime: 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static createSessionByServiceId({ serviceId }: { serviceId: string }) {
|
|
34
|
+
let settings = new Map();
|
|
35
|
+
|
|
36
|
+
settings.set(SessionAttribute.serviceId, serviceId);
|
|
37
|
+
settings.set(SessionAttribute.logged, true);
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
serverId: serviceId,
|
|
41
|
+
sessionId: "",
|
|
42
|
+
settings,
|
|
43
|
+
connectedTime: 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { RpcAsyncService, RpcClient, SocketEnum } from "@fastcar/rpc";
|
|
2
|
+
|
|
3
|
+
class NotifyHandle implements RpcAsyncService {
|
|
4
|
+
async handleMsg(url: string, data: Object): Promise<void | Object> {
|
|
5
|
+
console.log("收到服务端消息", url, data);
|
|
6
|
+
return {
|
|
7
|
+
url,
|
|
8
|
+
data: "来自客户端的消息---",
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe("连接器连接", () => {
|
|
14
|
+
it("服务端和客户端交互", async () => {
|
|
15
|
+
let success: number = 0;
|
|
16
|
+
let totalTime = 0;
|
|
17
|
+
let testTotal = 10;
|
|
18
|
+
let testUids = 100;
|
|
19
|
+
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
console.log("成功率---", success);
|
|
22
|
+
console.log("平均耗时", totalTime / (testTotal * testUids));
|
|
23
|
+
}, 10000);
|
|
24
|
+
|
|
25
|
+
let clients: RpcClient[] = [];
|
|
26
|
+
|
|
27
|
+
for (let j = 1; j < testUids + 1; j++) {
|
|
28
|
+
let client1 = new RpcClient(
|
|
29
|
+
{
|
|
30
|
+
url: `ws://localhost:2002`,
|
|
31
|
+
type: SocketEnum.WS,
|
|
32
|
+
},
|
|
33
|
+
new NotifyHandle()
|
|
34
|
+
);
|
|
35
|
+
await client1.start();
|
|
36
|
+
if (client1.isConnect()) {
|
|
37
|
+
clients.push(client1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
clients.forEach(async (client1, j) => {
|
|
42
|
+
let result = await client1.request("/account/login", { uid: j });
|
|
43
|
+
console.log("登录结果", result);
|
|
44
|
+
//向自身发送消息
|
|
45
|
+
for (let i = 0; i < testTotal; i++) {
|
|
46
|
+
let now = Date.now();
|
|
47
|
+
client1
|
|
48
|
+
.request("/room/sendMsg", {
|
|
49
|
+
toUid: j,
|
|
50
|
+
msg: "hello world",
|
|
51
|
+
serverType: "chat",
|
|
52
|
+
})
|
|
53
|
+
.then((res) => {
|
|
54
|
+
console.log(res.code);
|
|
55
|
+
if (res.code == 200) {
|
|
56
|
+
success++;
|
|
57
|
+
}
|
|
58
|
+
console.log("耗时----" + i, Date.now() - now);
|
|
59
|
+
totalTime += Date.now() - now;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { RpcAsyncService, RpcClient, SocketEnum } from "@fastcar/rpc";
|
|
2
|
+
|
|
3
|
+
class NotifyHandle implements RpcAsyncService {
|
|
4
|
+
async handleMsg(url: string, data: Object): Promise<void | Object> {
|
|
5
|
+
// console.log("收到服务端消息", url, data);
|
|
6
|
+
// return {
|
|
7
|
+
// url,
|
|
8
|
+
// data: "来自客户端的消息---",
|
|
9
|
+
// };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let success: number = 0;
|
|
14
|
+
let totalTime = 0;
|
|
15
|
+
let testTotal = 10;
|
|
16
|
+
let testUids = 100;
|
|
17
|
+
|
|
18
|
+
let index = parseInt(process.argv.pop() || "0");
|
|
19
|
+
index = 0;
|
|
20
|
+
console.log("index----", index);
|
|
21
|
+
|
|
22
|
+
setTimeout(() => {
|
|
23
|
+
console.log("成功率---", success);
|
|
24
|
+
console.log("平均耗时", totalTime / (testTotal * testUids));
|
|
25
|
+
}, 10000);
|
|
26
|
+
|
|
27
|
+
let clients: RpcClient[] = [];
|
|
28
|
+
|
|
29
|
+
async function test() {
|
|
30
|
+
for (let j = 1; j < testUids + 1; j++) {
|
|
31
|
+
let client1 = new RpcClient(
|
|
32
|
+
{
|
|
33
|
+
url: `ws://localhost:${Math.random() > 0.5 ? 4002 : 2002}`,
|
|
34
|
+
type: SocketEnum.WS,
|
|
35
|
+
},
|
|
36
|
+
new NotifyHandle()
|
|
37
|
+
);
|
|
38
|
+
await client1.start();
|
|
39
|
+
if (!client1.isConnect()) {
|
|
40
|
+
console.error("连接未成功");
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
clients.push(client1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
clients.forEach(async (c, cindex) => {
|
|
48
|
+
let uid = cindex + testUids * index;
|
|
49
|
+
let result = await c.request("/account/login", { uid });
|
|
50
|
+
console.log("登录结果", result);
|
|
51
|
+
//向自身发送消息
|
|
52
|
+
for (let i = 0; i < testTotal; i++) {
|
|
53
|
+
let now = Date.now();
|
|
54
|
+
c.request("/room/sendMsg", {
|
|
55
|
+
toUid: uid,
|
|
56
|
+
msg: "hello world",
|
|
57
|
+
serverType: "chat",
|
|
58
|
+
}).then((res) => {
|
|
59
|
+
if (res.code == 200) {
|
|
60
|
+
success++;
|
|
61
|
+
}
|
|
62
|
+
// console.log("耗时----" + i, Date.now() - now);
|
|
63
|
+
totalTime += Date.now() - now;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
test();
|
|
71
|
+
}, Math.random() * 2000);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compileOnSave": true,
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"paths": {
|
|
6
|
+
"@/*": [
|
|
7
|
+
"./src/*"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"module": "commonjs",
|
|
11
|
+
"target": "ES2023",
|
|
12
|
+
"outDir": "./target",
|
|
13
|
+
"types": [
|
|
14
|
+
"node",
|
|
15
|
+
"mocha"
|
|
16
|
+
], //在node或mocha环境中运行
|
|
17
|
+
"experimentalDecorators": true, //启用注解
|
|
18
|
+
"emitDecoratorMetadata": true, //启用元数据
|
|
19
|
+
"moduleResolution": "node", //使用node作为模块解析
|
|
20
|
+
"strict": true, //启用严格模式
|
|
21
|
+
"sourceMap": false,
|
|
22
|
+
},
|
|
23
|
+
"include": [
|
|
24
|
+
"src/**/*",
|
|
25
|
+
],
|
|
26
|
+
"ts-node": {
|
|
27
|
+
"transpileOnly": true, //开启快速编译
|
|
28
|
+
"require": [ //开启paths支持
|
|
29
|
+
"tsconfig-paths/register"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"tsc-alias": {
|
|
33
|
+
"replacers": {
|
|
34
|
+
"base-url": {
|
|
35
|
+
"enabled": false
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
}
|