Compare commits

..

7 Commits

Author SHA1 Message Date
syuilo
07560a4fdd 10.8.0 2018-10-11 18:38:31 +09:00
syuilo
7edca21c05 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2018-10-11 18:35:50 +09:00
syuilo
34105abd9d Fix 2018-10-11 18:35:19 +09:00
syuilo
1bbca48a0b Update setup.ja.md 2018-10-11 18:20:27 +09:00
syuilo
21f6a86772 Update setup.ja.md 2018-10-11 18:18:15 +09:00
syuilo
6559197c55 Clean up 2018-10-11 18:10:41 +09:00
syuilo
05f9ad11bb Redisがインストールされているときはイベントの共有にRedisのpub/subを使うように 2018-10-11 18:09:41 +09:00
6 changed files with 55 additions and 12 deletions

View File

@@ -27,9 +27,14 @@ adduser --disabled-password --disabled-login misskey
##### オプション
* [Redis](https://redis.io/)
* Redisはオプションですが、インストールすることを強く推奨します。
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけです
* [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います
* Redisはオプションですが、インストールすることを強く推奨します。
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
* Misskeyプロセスを複数起動しての負荷分散
* レートリミット
* Twitter連携
* [Elasticsearch](https://www.elastic.co/)
* 検索機能を有効にするためにはインストールが必要です。
*3.* MongoDBの設定
----------------------------------------------------------------

View File

@@ -1,7 +1,7 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.7.2",
"version": "10.8.0",
"clientVersion": "1.0.10417",
"codename": "nighthike",
"main": "./built/index.js",

View File

@@ -1,6 +1,5 @@
import autobind from 'autobind-decorator';
import * as websocket from 'websocket';
import Xev from 'xev';
import * as debug from 'debug';
import User, { IUser } from '../../../models/user';
@@ -11,6 +10,7 @@ import readNote from '../../../services/note/read';
import Channel from './channel';
import channels from './channels';
import { EventEmitter } from 'events';
const log = debug('misskey');
@@ -21,14 +21,14 @@ export default class Connection {
public user?: IUser;
public app: IApp;
private wsConnection: websocket.connection;
public subscriber: Xev;
public subscriber: EventEmitter;
private channels: Channel[] = [];
private subscribingNotes: any = {};
public sendMessageToWsOverride: any = null; // 後方互換性のため
constructor(
wsConnection: websocket.connection,
subscriber: Xev,
subscriber: EventEmitter,
user: IUser,
app: IApp
) {

View File

@@ -1,11 +1,14 @@
import * as http from 'http';
import * as websocket from 'websocket';
import * as redis from 'redis';
import Xev from 'xev';
import MainStreamConnection from './stream';
import { ParsedUrlQuery } from 'querystring';
import authenticate from './authenticate';
import channels from './stream/channels';
import { EventEmitter } from 'events';
import config from '../../config';
module.exports = (server: http.Server) => {
// Init websocket server
@@ -16,11 +19,34 @@ module.exports = (server: http.Server) => {
ws.on('request', async (request) => {
const connection = request.accept();
const ev = new Xev();
const q = request.resourceURL.query as ParsedUrlQuery;
const [user, app] = await authenticate(q.i as string);
let ev: EventEmitter;
if (config.redis) {
// Connect to Redis
const subscriber = redis.createClient(
config.redis.port, config.redis.host);
subscriber.subscribe('misskey');
ev = new EventEmitter();
subscriber.on('message', async (_, data) => {
const obj = JSON.parse(data);
ev.emit(obj.channel, obj.message);
});
connection.once('close', () => {
subscriber.unsubscribe();
subscriber.quit();
});
} else {
ev = new Xev();
}
const main = new MainStreamConnection(connection, ev, user, app);
// 後方互換性のため

View File

@@ -1,4 +1,5 @@
import * as mongo from 'mongodb';
import redis from './db/redis';
import Xev from 'xev';
import Meta, { IMeta } from './models/meta';
@@ -9,7 +10,10 @@ class Publisher {
private meta: IMeta;
constructor() {
this.ev = new Xev();
// Redisがインストールされてないときはプロセス間通信を使う
if (redis == null) {
this.ev = new Xev();
}
setInterval(async () => {
this.meta = await Meta.findOne({});
@@ -28,7 +32,14 @@ class Publisher {
{ type: type, body: null } :
{ type: type, body: value };
this.ev.emit(channel, message);
if (this.ev) {
this.ev.emit(channel, message);
} else {
redis.publish('misskey', JSON.stringify({
channel: channel,
message: message
}));
}
}
public publishMainStream = (userId: ID, type: string, value?: any): void => {

View File

@@ -10,7 +10,8 @@ DriveFile.find({
withoutChunks: { $exists: false }
}, {
withoutChunks: false
}]
}],
'metadata.deletedAt': { $exists: false }
}, {
fields: {
_id: true