summaryrefslogtreecommitdiff
path: root/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-03-19 20:43:24 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-03-19 20:43:24 +0900
commit87c8f9ff953499340496e9c5db09c93eaff08851 (patch)
tree13c00ab0edf7bae614216a06a015c9c50b056b83 /src/server/api/stream
parentperf(server): Improver performance (diff)
downloadsharkey-87c8f9ff953499340496e9c5db09c93eaff08851.tar.gz
sharkey-87c8f9ff953499340496e9c5db09c93eaff08851.tar.bz2
sharkey-87c8f9ff953499340496e9c5db09c93eaff08851.zip
perf: Reduce database query
Diffstat (limited to 'src/server/api/stream')
-rw-r--r--src/server/api/stream/index.ts38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index bb37cfa622..4a87f61e7f 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -2,7 +2,6 @@ import autobind from 'autobind-decorator';
import * as websocket from 'websocket';
import { readNotification } from '../common/read-notification';
import call from '../call';
-import readNote from '../../../services/note/read';
import Channel from './channel';
import channels from './channels';
import { EventEmitter } from 'events';
@@ -14,6 +13,8 @@ import { AccessToken } from '../../../models/entities/access-token';
import { UserProfile } from '../../../models/entities/user-profile';
import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '../../../services/stream';
import { UserGroup } from '../../../models/entities/user-group';
+import { readMention } from '../../../services/note/read-mention';
+import { readSpecifiedNote } from '../../../services/note/read-specified-note';
/**
* Main stream connection
@@ -86,9 +87,10 @@ export default class Connection {
switch (type) {
case 'api': this.onApiRequest(body); break;
case 'readNotification': this.onReadNotification(body); break;
- case 'subNote': this.onSubscribeNote(body, true); break;
- case 'sn': this.onSubscribeNote(body, true); break; // alias
- case 's': this.onSubscribeNote(body, false); break;
+ case 'readMention': this.onReadMention(body); break;
+ case 'readSpecifiedNote': this.onReadSpecifiedNote(body); break;
+ case 'subNote': this.onSubscribeNote(body); break;
+ case 'sn': this.onSubscribeNote(body); break; // alias
case 'unsubNote': this.onUnsubscribeNote(body); break;
case 'un': this.onUnsubscribeNote(body); break; // alias
case 'connect': this.onChannelConnectRequested(body); break;
@@ -141,11 +143,31 @@ export default class Connection {
readNotification(this.user!.id, [payload.id]);
}
+ @autobind
+ private onReadMention(payload: any) {
+ if (!payload.id) return;
+ if (this.user) {
+ // TODO: ある程度まとめてreadMentionするようにする
+ // 具体的には、この箇所ではキュー的な配列にread予定ノートを溜めておくに留めて、別の箇所で定期的にキューにあるノートを配列でreadMentionに渡すような実装にする
+ readMention(this.user.id, [payload.id]);
+ }
+ }
+
+ @autobind
+ private onReadSpecifiedNote(payload: any) {
+ if (!payload.id) return;
+ if (this.user) {
+ // TODO: ある程度まとめてreadSpecifiedNoteするようにする
+ // 具体的には、この箇所ではキュー的な配列にread予定ノートを溜めておくに留めて、別の箇所で定期的にキューにあるノートを配列でreadSpecifiedNoteに渡すような実装にする
+ readSpecifiedNote(this.user.id, [payload.id]);
+ }
+ }
+
/**
* 投稿購読要求時
*/
@autobind
- private onSubscribeNote(payload: any, read: boolean) {
+ private onSubscribeNote(payload: any) {
if (!payload.id) return;
if (this.subscribingNotes[payload.id] == null) {
@@ -157,12 +179,6 @@ export default class Connection {
if (this.subscribingNotes[payload.id] === 1) {
this.subscriber.on(`noteStream:${payload.id}`, this.onNoteStreamMessage);
}
-
- if (this.user && read) {
- // TODO: クライアントでタイムライン読み込みなどすると、一度に大量のreadNoteが発生しクエリ数がすごいことになるので、ある程度まとめてreadNoteするようにする
- // 具体的には、この箇所ではキュー的な配列にread予定ノートを溜めておくに留めて、別の箇所で定期的にキューにあるノートを配列でreadNoteに渡すような実装にする
- readNote(this.user.id, payload.id);
- }
}
/**