モード機能

注意

モード機能は実験的機能のため、正式版では仕様が変更される可能性があります

概要

モード (mode) 機能 は、指定されているモード毎に Sora の挙動を変更する機能です。

目的

現在の Sora 自体には認証の機能を持っていないため、一時的に接続をブロックするといった仕組みがありません。もしやるとしても認証サーバー側で処理をすることになり不便でした。

そこで、Sora 側にモード機能を持たせることで、モードを切り替えることで接続を気軽にブロックする機能を追加します。

現時点では接続をブロックするモードのみですが、今後も便利なモードを追加していく予定です。

モード

ノーマルモード

このモードは何もせず、すべての新規接続を受け入れます。

新規コネクションブロックモード

このモードは新規の接続をブロックします。すでに接続しているコネクションはそのままです。

新規セッションブロックモード

このモードは新規セッションの作成をブロックします。すでに接続しているセッションやコネクションはそのままです。

そのためセッション(チャネルに 1 人以上接続しているアクティブな状態)が存在する場合は接続できますが、セッションが存在しない場合は新規の接続をブロックします。

イニシャルモード

このモードはすべての接続をブロックします。

  • クラスターへ参加したタイミングでノーマルモードで自動で切り替わります

  • クラスターから孤立したタイミングでイニシャルモードへ切り替わります

このモードを指定して変更する事は出来ません。

ウェブフック

session.vanished

このウェブフックは、新規コネクションブロック、または新規セッションブロックモード時に全てのセッションが破棄されたタイミングで通知されます。

{
     "type": "session.vanished",
}

API

ChangeMode

  • mode

    • normal

    • block_new_session

    • block_new_connection

$ http POST 127.0.0.1:3000 x-sora-target:Sora_20211215.ChangeMode mode=block_new_session -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 29
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.3.0
x-sora-target: Sora_20211215.ChangeMode

{
    "mode": "block_new_session"
}


HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 28
content-type: application/json
date: Wed, 06 Oct 2021 10:42:35 GMT
server: Cowboy

{
    "mode": "block_new_session"
}
$ http POST 127.0.0.1:3000 x-sora-target:Sora_20211215.ChangeMode mode=block_new_connection -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 32
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.3.0
x-sora-target: Sora_20211215.ChangeMode

{
    "mode": "block_new_connection"
}


HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 31
content-type: application/json
date: Wed, 06 Oct 2021 10:44:05 GMT
server: Cowboy

{
    "mode": "block_new_connection"
}

GetMode

$ http POST 127.0.0.1:3000 x-sora-target:Sora_20211215.GetMode -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.3.0
x-sora-target: Sora_20211215.GetMode



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 17
content-type: application/json
date: Wed, 06 Oct 2021 10:42:19 GMT
server: Cowboy

{
    "mode": "normal"
}

クラスター機能

クラスター機能有効での Sora 起動時の mode

クラスター機能を利用した場合、 Sora 起動時の modeイニシャルモード になります。 そのため、新規での接続を許可するには ChangeMode API にて ノーマルモード へ変更する必要があります。

クラスターの参加に成功したタイミングで イニシャルモード から ノーマルモード へ変更されます。

チャネル ID のノード割り当て

クラスター機能を利用した場合、 mode新規セッションブロックモード または 新規コネクションブロックモード のノードに対して、 新規のチャネル ID を割り当てません。

シーケンス図

block_new_connection

blockdiag クライアント1 クライアント2 Sora HTTPクライアント "type": "connect" ChangeMode API mode=block_new_connection "type": "connect" 失敗 ChangeMode API mode=normal "type": "connect" Sora 起動 モード: normal モード: block_new_connection モード: normal

block_new_session

blockdiag クライアント1 クライアント2 クライアント3 Sora HTTPクライアント type: connect channel_id: spam type: offer ChangeMode API mode=block_new_session type: connect channel_id: egg 失敗 type: connect channel_id: spam type: offer Sora 起動 モード: normal モード: block_new_session
© Copyright 2022, Shiguredo Inc Created using Sphinx 5.0.0b1