summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
authorriku6460 <17585784+riku6460@users.noreply.github.com>2023-07-04 07:49:13 +0900
committerGitHub <noreply@github.com>2023-07-04 07:49:13 +0900
commit61e7eb8ff1d7ef222e60b687090cca53a182efc3 (patch)
tree01ef60171f5546ebb372a8c7683c02e45fd734ab /packages/backend/src/server
parentMerge branch 'develop' of https://github.com/misskey-dev/misskey into develop (diff)
downloadsharkey-61e7eb8ff1d7ef222e60b687090cca53a182efc3.tar.gz
sharkey-61e7eb8ff1d7ef222e60b687090cca53a182efc3.tar.bz2
sharkey-61e7eb8ff1d7ef222e60b687090cca53a182efc3.zip
perf(backend): JSON.parse の呼び出しを削減する (#11091)
* perf(backend): JSON.parse の呼び出しを削減する Co-authored-by: Hidekazu Kobayashi <kobahide789@gmail.com> * Update CHANGELOG.md --------- Co-authored-by: Hidekazu Kobayashi <kobahide789@gmail.com>
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/api/StreamingApiServerService.ts16
1 files changed, 11 insertions, 5 deletions
diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts
index 4a0342d2b4..e4291becf0 100644
--- a/packages/backend/src/server/api/StreamingApiServerService.ts
+++ b/packages/backend/src/server/api/StreamingApiServerService.ts
@@ -103,6 +103,13 @@ export class StreamingApiServerService {
});
});
+ const globalEv = new EventEmitter();
+
+ this.redisForSub.on('message', (_: string, data: string) => {
+ const parsed = JSON.parse(data);
+ globalEv.emit('message', parsed);
+ });
+
this.#wss.on('connection', async (connection: WebSocket.WebSocket, request: http.IncomingMessage, ctx: {
stream: MainStreamConnection,
user: LocalUser | null;
@@ -112,12 +119,11 @@ export class StreamingApiServerService {
const ev = new EventEmitter();
- async function onRedisMessage(_: string, data: string): Promise<void> {
- const parsed = JSON.parse(data);
- ev.emit(parsed.channel, parsed.message);
+ function onRedisMessage(data: any): void {
+ ev.emit(data.channel, data.message);
}
- this.redisForSub.on('message', onRedisMessage);
+ globalEv.on('message', onRedisMessage);
await stream.listen(ev, connection);
@@ -137,7 +143,7 @@ export class StreamingApiServerService {
connection.once('close', () => {
ev.removeAllListeners();
stream.dispose();
- this.redisForSub.off('message', onRedisMessage);
+ globalEv.off('message', onRedisMessage);
this.#connections.delete(connection);
if (userUpdateIntervalId) clearInterval(userUpdateIntervalId);
});