Open syuilo opened 8 months ago
Twitter(X)みたいに「n件の新しいツイート」の件数だけを返すのと、新しい通知があればtrue返すみたいなapiがあれば出来そうだと思った(現状がここらへんをwebsocketを使用してるため)
@syuilo この件、差し支えなければ自分がやろうと思うのですが… 実装イメージ的に以下で大丈夫そうでしょうか??(☆の部分は議論の余地あるかもと思った所)
☆1…ひとまず有無のみで考えていますが、件数のほうが良さそうでしょうか。 件数ありの場合、取得処理が少し複雑になるかと(FTTありのときはredisでOK、なしのときは…実装コストやばそう) ☆2…もっと間隔は長くても良さそう??
そんな感じになりそうですが、リアクションの更新をどうするかなど他にも考えなければならないことが膨大にありそうですね
※メモ
10秒に1回↑のエンドポイントを叩いて最新の有無を問い合わせる
これに、RedisのlatestReadNotificationを見る機能を増やす
mark-all-as-read.tsあったNotificationService.readAllNotification()
を叩くエンドポイントも生やしておけば既読化も出来そう。
そんな感じになりそうですが、リアクションの更新をどうするかなど他にも考えなければならないことが膨大にありそうですね
@syuilo
リアクションの更新をどうするか
最新ノート取得時に、新規で取得するノートの規定数にプラスして、既に表示されているノートの最新数件(MkPaginationが持ってるdisplayLimitあたりが妥当と考えます)を取るのが良いかと思いました。新しいノートを取得しつつ、リアクションの状況、リノートやリプライなどの状態も一緒に更新できるかとおもいます。
以下のようなイメージです。
リアクションを考えると、5秒に1回程度は表示を更新したいけど、5秒に1回
1の中の一番古いノートIDをsinceIdに設定してTL取得
をしてると通信量がかなり増えてしまいそうな気がした
最新ノート取得時にまとめて更新するのではなく、リアクションの鮮度のみを重要視されるのであれば…
ノートIDをまとめてpostすると、以下のようにMisskey.entities.Note
のreactions/reactionEmojis
と互換性がある形でnote_reaction
テーブル内の中身を返してくれるエンドポイントを新たに生やすのは如何でしょう??
[
{
"noteId": "9m2rp5kn45mv000r",
"reactionEmojis": {
'neo_armstrong_cyclone_jet_armstrong_hou@misskey.io' : "https://s3.arkjp.net/misskey/ceb88abf-e2dd-4e14-b226-82dc5c21b2f7.png"
},
"reactions": {
':60fpsparrot:' : 2,
'🍮' : 2,
':neo_armstrong_cyclone_jet_armstrong_hou@misskey.io:' : 334
}
},
{
"noteId": "9m30fhprh0ym0008",
"reactionEmojis": {},
"reactions": {
'🎉' : 4,
'🦄' : 1
}
}
]
MkPagination内にあるノートのIDをまとめて投げる→受信結果をMkPaginationが持ってる各Noteのオブジェクトに上書き…みたいな形で更新できるかとおもいます
良さそう
Is there any update on this? Being able to have WebSockets be optional for timeline auto-updates, notifications, and emoji reactions would be really useful for servers behind CDNs that have no support for proxying WebSocket requests to origin...
Summary
WebSocketを一切使わずにクライアントを利用するモード 場合によってはサーバーの負荷軽減になるかも