mirror of
https://activitypub.software/TransFem-org/Sharkey
synced 2024-12-22 08:20:10 +00:00
Redis必須に
This commit is contained in:
parent
186d7bbfd9
commit
e369031a28
12 changed files with 48 additions and 111 deletions
|
@ -65,10 +65,10 @@ db:
|
||||||
# ┌─────────────────────┐
|
# ┌─────────────────────┐
|
||||||
#───┘ Redis configuration └─────────────────────────────────────
|
#───┘ Redis configuration └─────────────────────────────────────
|
||||||
|
|
||||||
#redis:
|
redis:
|
||||||
# host: localhost
|
host: localhost
|
||||||
# port: 6379
|
port: 6379
|
||||||
# pass: example-pass
|
#pass: example-pass
|
||||||
|
|
||||||
# ┌─────────────────────────────┐
|
# ┌─────────────────────────────┐
|
||||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
#───┘ Elasticsearch configuration └─────────────────────────────
|
||||||
|
|
|
@ -7,7 +7,8 @@ If you encounter any problems with updating, please try the following:
|
||||||
|
|
||||||
11.0.0
|
11.0.0
|
||||||
----------
|
----------
|
||||||
* データベースがMongoDBからPostgreSQLに変更されました
|
* **データベースがMongoDBからPostgreSQLに変更されました**
|
||||||
|
* **Redisが必須に**
|
||||||
* アカウントを完全に削除できるように
|
* アカウントを完全に削除できるように
|
||||||
* ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように
|
* ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように
|
||||||
* フォロー申請数が実際より1すくなくなる問題を修正
|
* フォロー申請数が実際より1すくなくなる問題を修正
|
||||||
|
|
|
@ -24,18 +24,13 @@ Please install and setup these softwares:
|
||||||
#### Dependencies :package:
|
#### Dependencies :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||||
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### Optional
|
##### Optional
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redis is optional, but we strongly recommended to install it
|
|
||||||
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* Setup PostgreSQL
|
*3.* Install Misskey
|
||||||
----------------------------------------------------------------
|
|
||||||
:)
|
|
||||||
|
|
||||||
*4.* Install Misskey
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `su - misskey` Connect to misskey user.
|
1. `su - misskey` Connect to misskey user.
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
|
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
|
||||||
|
@ -43,12 +38,12 @@ Please install and setup these softwares:
|
||||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||||
5. `npm install` Install misskey dependencies.
|
5. `npm install` Install misskey dependencies.
|
||||||
|
|
||||||
*5.* Configure Misskey
|
*4.* Configure Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||||
2. Edit `default.yml`
|
2. Edit `default.yml`
|
||||||
|
|
||||||
*6.* Build Misskey
|
*5.* Build Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
Build misskey with the following:
|
Build misskey with the following:
|
||||||
|
@ -64,13 +59,13 @@ If you're still encountering errors about some modules, use node-gyp:
|
||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
*7.* Init DB
|
*6.* Init DB
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
``` shell
|
``` shell
|
||||||
npm run init
|
npm run init
|
||||||
```
|
```
|
||||||
|
|
||||||
*8.* That is it.
|
*7.* That is it.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Well done! Now, you have an environment that run to Misskey.
|
Well done! Now, you have an environment that run to Misskey.
|
||||||
|
|
||||||
|
|
|
@ -24,18 +24,13 @@ Installez les paquets suivants :
|
||||||
#### Dépendences :package:
|
#### Dépendences :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
|
||||||
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### Optionnels
|
##### Optionnels
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redis est optionnel mais nous vous recommandons vivement de l'installer
|
|
||||||
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
|
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* Paramètrage de PostgreSQL
|
*3.* Installation de Misskey
|
||||||
----------------------------------------------------------------
|
|
||||||
:)
|
|
||||||
|
|
||||||
*4.* Installation de Misskey
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `su - misskey` Basculez vers l'utilisateur misskey.
|
1. `su - misskey` Basculez vers l'utilisateur misskey.
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey.
|
2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey.
|
||||||
|
@ -43,12 +38,12 @@ Installez les paquets suivants :
|
||||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||||
5. `npm install` Installez les dépendances de misskey.
|
5. `npm install` Installez les dépendances de misskey.
|
||||||
|
|
||||||
*5.* Création du fichier de configuration
|
*4.* Création du fichier de configuration
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
||||||
2. Editez le fichier `default.yml`
|
2. Editez le fichier `default.yml`
|
||||||
|
|
||||||
*6.* Construction de Misskey
|
*5.* Construction de Misskey
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
Construisez Misskey comme ceci :
|
Construisez Misskey comme ceci :
|
||||||
|
@ -64,7 +59,7 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
|
||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
*7.* C'est tout.
|
*6.* C'est tout.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
||||||
|
|
||||||
|
|
|
@ -24,25 +24,14 @@ adduser --disabled-password --disabled-login misskey
|
||||||
#### 依存関係 :package:
|
#### 依存関係 :package:
|
||||||
* **[Node.js](https://nodejs.org/en/)** (11.7.0以上)
|
* **[Node.js](https://nodejs.org/en/)** (11.7.0以上)
|
||||||
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
|
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
##### オプション
|
##### オプション
|
||||||
* [Redis](https://redis.io/)
|
|
||||||
* Redisはオプションですが、インストールすることを強く推奨します。
|
|
||||||
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
|
|
||||||
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
|
|
||||||
* Misskeyプロセスを複数起動しての負荷分散
|
|
||||||
* レートリミット
|
|
||||||
* ジョブキュー
|
|
||||||
* Twitter連携
|
|
||||||
* [Elasticsearch](https://www.elastic.co/)
|
* [Elasticsearch](https://www.elastic.co/)
|
||||||
* 検索機能を有効にするためにはインストールが必要です。
|
* 検索機能を有効にするためにはインストールが必要です。
|
||||||
* [FFmpeg](https://www.ffmpeg.org/)
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
*3.* PostgreSQLの設定
|
*3.* Misskeyのインストール
|
||||||
----------------------------------------------------------------
|
|
||||||
:)
|
|
||||||
|
|
||||||
*4.* Misskeyのインストール
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `su - misskey` misskeyユーザーを使用
|
1. `su - misskey` misskeyユーザーを使用
|
||||||
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
|
||||||
|
@ -50,12 +39,12 @@ adduser --disabled-password --disabled-login misskey
|
||||||
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||||
5. `npm install` Misskeyの依存パッケージをインストール
|
5. `npm install` Misskeyの依存パッケージをインストール
|
||||||
|
|
||||||
*5.* 設定ファイルを作成する
|
*4.* 設定ファイルを作成する
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||||
2. `default.yml` を編集する。
|
2. `default.yml` を編集する。
|
||||||
|
|
||||||
*6.* Misskeyのビルド
|
*5.* Misskeyのビルド
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
次のコマンドでMisskeyをビルドしてください:
|
次のコマンドでMisskeyをビルドしてください:
|
||||||
|
@ -70,13 +59,13 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
|
||||||
3. `node-gyp build`
|
3. `node-gyp build`
|
||||||
4. `NODE_ENV=production npm run build`
|
4. `NODE_ENV=production npm run build`
|
||||||
|
|
||||||
*7.* データベースを初期化
|
*6.* データベースを初期化
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
``` shell
|
``` shell
|
||||||
npm run init
|
npm run init
|
||||||
```
|
```
|
||||||
|
|
||||||
*8.* 以上です!
|
*7.* 以上です!
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as redis from 'redis';
|
import * as redis from 'redis';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
|
|
||||||
export default config.redis ? redis.createClient(
|
export default redis.createClient(
|
||||||
config.redis.port,
|
config.redis.port,
|
||||||
config.redis.host,
|
config.redis.host,
|
||||||
{
|
{
|
||||||
|
@ -9,4 +9,4 @@ export default config.redis ? redis.createClient(
|
||||||
prefix: config.redis.prefix,
|
prefix: config.redis.prefix,
|
||||||
db: config.redis.db || 0
|
db: config.redis.db || 0
|
||||||
}
|
}
|
||||||
) : null;
|
);
|
||||||
|
|
|
@ -8,12 +8,6 @@ import Logger from '../../services/logger';
|
||||||
const logger = new Logger('limiter');
|
const logger = new Logger('limiter');
|
||||||
|
|
||||||
export default (endpoint: IEndpoint, user: User) => new Promise((ok, reject) => {
|
export default (endpoint: IEndpoint, user: User) => new Promise((ok, reject) => {
|
||||||
// Redisがインストールされてない場合は常に許可
|
|
||||||
if (limiterDB == null) {
|
|
||||||
ok();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const limitation = endpoint.meta.limit!;
|
const limitation = endpoint.meta.limit!;
|
||||||
|
|
||||||
const key = limitation.hasOwnProperty('key')
|
const key = limitation.hasOwnProperty('key')
|
||||||
|
|
|
@ -83,8 +83,6 @@ async function getOAuth2() {
|
||||||
}
|
}
|
||||||
|
|
||||||
router.get('/connect/discord', async ctx => {
|
router.get('/connect/discord', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
if (!compareOrigin(ctx)) {
|
if (!compareOrigin(ctx)) {
|
||||||
ctx.throw(400, 'invalid origin');
|
ctx.throw(400, 'invalid origin');
|
||||||
return;
|
return;
|
||||||
|
@ -110,8 +108,6 @@ router.get('/connect/discord', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/signin/discord', async ctx => {
|
router.get('/signin/discord', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const sessid = uuid();
|
const sessid = uuid();
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
|
@ -138,8 +134,6 @@ router.get('/signin/discord', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/dc/cb', async ctx => {
|
router.get('/dc/cb', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const userToken = getUserToken(ctx);
|
const userToken = getUserToken(ctx);
|
||||||
|
|
||||||
const oauth2 = await getOAuth2();
|
const oauth2 = await getOAuth2();
|
||||||
|
@ -160,7 +154,7 @@ router.get('/dc/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
||||||
redis!.get(sessid, async (_, state) => {
|
redis.get(sessid, async (_, state) => {
|
||||||
res(JSON.parse(state));
|
res(JSON.parse(state));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -241,7 +235,7 @@ router.get('/dc/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
||||||
redis!.get(userToken, async (_, state) => {
|
redis.get(userToken, async (_, state) => {
|
||||||
res(JSON.parse(state));
|
res(JSON.parse(state));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -80,8 +80,6 @@ async function getOath2() {
|
||||||
}
|
}
|
||||||
|
|
||||||
router.get('/connect/github', async ctx => {
|
router.get('/connect/github', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
if (!compareOrigin(ctx)) {
|
if (!compareOrigin(ctx)) {
|
||||||
ctx.throw(400, 'invalid origin');
|
ctx.throw(400, 'invalid origin');
|
||||||
return;
|
return;
|
||||||
|
@ -106,8 +104,6 @@ router.get('/connect/github', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/signin/github', async ctx => {
|
router.get('/signin/github', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const sessid = uuid();
|
const sessid = uuid();
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
|
@ -133,8 +129,6 @@ router.get('/signin/github', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/gh/cb', async ctx => {
|
router.get('/gh/cb', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const userToken = getUserToken(ctx);
|
const userToken = getUserToken(ctx);
|
||||||
|
|
||||||
const oauth2 = await getOath2();
|
const oauth2 = await getOath2();
|
||||||
|
@ -155,7 +149,7 @@ router.get('/gh/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
||||||
redis!.get(sessid, async (_, state) => {
|
redis.get(sessid, async (_, state) => {
|
||||||
res(JSON.parse(state));
|
res(JSON.parse(state));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -222,7 +216,7 @@ router.get('/gh/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
const { redirect_uri, state } = await new Promise<any>((res, rej) => {
|
||||||
redis!.get(userToken, async (_, state) => {
|
redis.get(userToken, async (_, state) => {
|
||||||
res(JSON.parse(state));
|
res(JSON.parse(state));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -79,8 +79,6 @@ async function getTwAuth() {
|
||||||
}
|
}
|
||||||
|
|
||||||
router.get('/connect/twitter', async ctx => {
|
router.get('/connect/twitter', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
if (!compareOrigin(ctx)) {
|
if (!compareOrigin(ctx)) {
|
||||||
ctx.throw(400, 'invalid origin');
|
ctx.throw(400, 'invalid origin');
|
||||||
return;
|
return;
|
||||||
|
@ -99,8 +97,6 @@ router.get('/connect/twitter', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/signin/twitter', async ctx => {
|
router.get('/signin/twitter', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const twAuth = await getTwAuth();
|
const twAuth = await getTwAuth();
|
||||||
const twCtx = await twAuth!.begin();
|
const twCtx = await twAuth!.begin();
|
||||||
|
|
||||||
|
@ -122,8 +118,6 @@ router.get('/signin/twitter', async ctx => {
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/tw/cb', async ctx => {
|
router.get('/tw/cb', async ctx => {
|
||||||
if (redis == null) return;
|
|
||||||
|
|
||||||
const userToken = getUserToken(ctx);
|
const userToken = getUserToken(ctx);
|
||||||
|
|
||||||
const twAuth = await getTwAuth();
|
const twAuth = await getTwAuth();
|
||||||
|
@ -137,7 +131,7 @@ router.get('/tw/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const get = new Promise<any>((res, rej) => {
|
const get = new Promise<any>((res, rej) => {
|
||||||
redis!.get(sessid, async (_, twCtx) => {
|
redis.get(sessid, async (_, twCtx) => {
|
||||||
res(twCtx);
|
res(twCtx);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -170,7 +164,7 @@ router.get('/tw/cb', async ctx => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const get = new Promise<any>((res, rej) => {
|
const get = new Promise<any>((res, rej) => {
|
||||||
redis!.get(userToken, async (_, twCtx) => {
|
redis.get(userToken, async (_, twCtx) => {
|
||||||
res(twCtx);
|
res(twCtx);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import * as http from 'http';
|
import * as http from 'http';
|
||||||
import * as websocket from 'websocket';
|
import * as websocket from 'websocket';
|
||||||
import * as redis from 'redis';
|
import * as redis from 'redis';
|
||||||
import Xev from 'xev';
|
|
||||||
|
|
||||||
import MainStreamConnection from './stream';
|
import MainStreamConnection from './stream';
|
||||||
import { ParsedUrlQuery } from 'querystring';
|
import { ParsedUrlQuery } from 'querystring';
|
||||||
|
@ -23,28 +22,24 @@ module.exports = (server: http.Server) => {
|
||||||
|
|
||||||
let ev: EventEmitter;
|
let ev: EventEmitter;
|
||||||
|
|
||||||
if (config.redis) {
|
// Connect to Redis
|
||||||
// Connect to Redis
|
const subscriber = redis.createClient(
|
||||||
const subscriber = redis.createClient(
|
config.redis.port, config.redis.host);
|
||||||
config.redis.port, config.redis.host);
|
|
||||||
|
|
||||||
subscriber.subscribe('misskey');
|
subscriber.subscribe('misskey');
|
||||||
|
|
||||||
ev = new EventEmitter();
|
ev = new EventEmitter();
|
||||||
|
|
||||||
subscriber.on('message', async (_, data) => {
|
subscriber.on('message', async (_, data) => {
|
||||||
const obj = JSON.parse(data);
|
const obj = JSON.parse(data);
|
||||||
|
|
||||||
ev.emit(obj.channel, obj.message);
|
ev.emit(obj.channel, obj.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
connection.once('close', () => {
|
connection.once('close', () => {
|
||||||
subscriber.unsubscribe();
|
subscriber.unsubscribe();
|
||||||
subscriber.quit();
|
subscriber.quit();
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
ev = new Xev();
|
|
||||||
}
|
|
||||||
|
|
||||||
const main = new MainStreamConnection(connection, ev, user, app);
|
const main = new MainStreamConnection(connection, ev, user, app);
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,19 @@
|
||||||
import redis from '../db/redis';
|
import redis from '../db/redis';
|
||||||
import Xev from 'xev';
|
|
||||||
import { User } from '../models/entities/user';
|
import { User } from '../models/entities/user';
|
||||||
import { Note } from '../models/entities/note';
|
import { Note } from '../models/entities/note';
|
||||||
import { UserList } from '../models/entities/user-list';
|
import { UserList } from '../models/entities/user-list';
|
||||||
import { ReversiGame } from '../models/entities/games/reversi/game';
|
import { ReversiGame } from '../models/entities/games/reversi/game';
|
||||||
|
|
||||||
class Publisher {
|
class Publisher {
|
||||||
private ev: Xev | null = null;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
// Redisがインストールされてないときはプロセス間通信を使う
|
|
||||||
if (redis == null) {
|
|
||||||
this.ev = new Xev();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private publish = (channel: string, type: string | null, value?: any): void => {
|
private publish = (channel: string, type: string | null, value?: any): void => {
|
||||||
const message = type == null ? value : value == null ?
|
const message = type == null ? value : value == null ?
|
||||||
{ type: type, body: null } :
|
{ type: type, body: null } :
|
||||||
{ type: type, body: value };
|
{ type: type, body: value };
|
||||||
|
|
||||||
if (this.ev) {
|
redis.publish('misskey', JSON.stringify({
|
||||||
this.ev.emit(channel, message);
|
channel: channel,
|
||||||
} else {
|
message: message
|
||||||
redis!.publish('misskey', JSON.stringify({
|
}));
|
||||||
channel: channel,
|
|
||||||
message: message
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public publishMainStream = (userId: User['id'], type: string, value?: any): void => {
|
public publishMainStream = (userId: User['id'], type: string, value?: any): void => {
|
||||||
|
|
Loading…
Reference in a new issue