summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-03-23 11:53:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-03-23 11:53:25 +0900
commit48ea805999c6cb8e900aeaec6edaf68788bd51e0 (patch)
tree77a982e791b348aaf939253927805316c23ca4cf /src
parentperf(server): Cache user instance actor (diff)
downloadmisskey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.tar.gz
misskey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.tar.bz2
misskey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.zip
perf(server): Redis接続をストリーミング接続ごとに作らず、プロセス全体で共有するように
Diffstat (limited to 'src')
-rw-r--r--src/db/redis.ts6
-rw-r--r--src/server/api/streaming.ts33
2 files changed, 13 insertions, 26 deletions
diff --git a/src/db/redis.ts b/src/db/redis.ts
index 41d030149c..7570aa59bf 100644
--- a/src/db/redis.ts
+++ b/src/db/redis.ts
@@ -1,7 +1,7 @@
import * as redis from 'redis';
import config from '../config';
-export default redis.createClient(
+const client = redis.createClient(
config.redis.port,
config.redis.host,
{
@@ -10,3 +10,7 @@ export default redis.createClient(
db: config.redis.db || 0
}
);
+
+client.subscribe(config.host);
+
+export default client;
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 10f2a70bad..4ec0c51374 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -1,12 +1,11 @@
import * as http from 'http';
import * as websocket from 'websocket';
-import * as redis from 'redis';
import MainStreamConnection from './stream';
import { ParsedUrlQuery } from 'querystring';
import authenticate from './authenticate';
import { EventEmitter } from 'events';
-import config from '../../config';
+import redisClient from '../../db/redis';
module.exports = (server: http.Server) => {
// Init websocket server
@@ -24,37 +23,21 @@ module.exports = (server: http.Server) => {
const connection = request.accept();
- let ev: EventEmitter;
+ const ev = new EventEmitter();
- // Connect to Redis
- const subscriber = redis.createClient(
- config.redis.port,
- config.redis.host,
- {
- password: config.redis.pass
- }
- );
-
- subscriber.subscribe(config.host);
-
- ev = new EventEmitter();
-
- subscriber.on('message', async (_, data) => {
- const obj = JSON.parse(data);
+ async function onRedisMessage(_: string, data: string) {
+ const parsed = JSON.parse(data);
+ ev.emit(parsed.channel, parsed.message);
+ }
- ev.emit(obj.channel, obj.message);
- });
-
- connection.once('close', () => {
- subscriber.unsubscribe();
- subscriber.quit();
- });
+ redisClient.on('message', onRedisMessage);
const main = new MainStreamConnection(connection, ev, user, app);
connection.once('close', () => {
ev.removeAllListeners();
main.dispose();
+ redisClient.off('message', onRedisMessage);
});
connection.on('message', async (data) => {