diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-03-23 11:53:25 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-03-23 11:53:25 +0900 |
| commit | 48ea805999c6cb8e900aeaec6edaf68788bd51e0 (patch) | |
| tree | 77a982e791b348aaf939253927805316c23ca4cf /src/server/api | |
| parent | perf(server): Cache user instance actor (diff) | |
| download | sharkey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.tar.gz sharkey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.tar.bz2 sharkey-48ea805999c6cb8e900aeaec6edaf68788bd51e0.zip | |
perf(server): Redis接続をストリーミング接続ごとに作らず、プロセス全体で共有するように
Diffstat (limited to 'src/server/api')
| -rw-r--r-- | src/server/api/streaming.ts | 33 |
1 files changed, 8 insertions, 25 deletions
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) => { |