モード機能¶
概要¶
モード機能 は、指定されているモードごとに Sora の挙動を変更する機能です。
目的¶
Sora 自体は認証の機能を持っていないため、メンテナンス時に一時的に接続をブロックするといった仕組みがありません。 接続をブロックする場合は、認証サーバー側で処理をすることになり不便でした。
そこで、Sora 側にモード機能を持たせることで、モードを切り替えることで接続を気軽にブロックできる機能を追加します。
モード¶
ノーマルモード¶
このモードは何もせず、すべての新規接続を受け入れます。
新規コネクションブロックモード¶
このモードは新規の接続をブロックします。すでに接続しているコネクションはそのままです。
新規セッションブロックモード¶
このモードは新規セッションの作成をブロックします。すでに接続しているセッションやコネクションはそのままです。
そのためセッション(チャネルに 1 人以上接続しているアクティブな状態)が存在する場合は接続できますが、セッションが存在しない場合は新規の接続をブロックします。
ウェブフック¶
session.vanished¶
注意
セッションウェブフック session.vanished
利用する場合は事前にサポートまでご連絡ください
警告
セッションウェブフック session.vanished
は 実験的機能 のため、正式版では仕様が変更される可能性があります
重要
このウェブフックリクエストが送信されるには sora.conf
の ignore_session_vanished_webhook が false
である必要があります。
このウェブフックは、新規コネクションブロック、または新規セッションブロックモード時にすべてのセッションが破棄されたタイミングで送信されます。
{
"type": "session.vanished",
}
API¶
ChangeMode API¶
モード変更 API です。指定するモードには 3 種類あります。
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"
}
詳細は ChangeMode をご確認ください。
GetMode API¶
モード取得 API です。
$ 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"
}
詳細は GetMode をご確認ください。
クラスター機能¶
チャネル ID のノード割り当て¶
クラスター機能を利用した場合、
mode
が 新規セッションブロックモード または 新規コネクションブロックモード のノードに対して、
新規のチャネル ID を割り当てません。
シーケンス図¶
block_new_connection¶
sequenceDiagram participant C1 as クライアント1 participant C2 as クライアント2 participant S as Sora participant A as アプリケーションサーバー note over S: Sora 起動 note over S: モード: normal C1->>S: "type": "connect" note over C1,S: クライアント1 WebRTC 確立 A->>S: ChangeMode API<br/>mode=block_new_connection note over S: モード: block_new_connection break 接続失敗 C2->>S: "type": "connect" end A->>S: ChangeMode API<br/>mode=normal note over S: モード: normal C2->>S: "type": "connect" note over C2,S: クライアント2 WebRTC 確立
block_new_session¶
sequenceDiagram participant C1 as クライアント1 participant C2 as クライアント2 participant C3 as クライアント3 participant S as Sora participant A as アプリケーションサーバー note over S: Sora 起動 note over S: モード: normal C1->>S: "type": "connect"<br/>channel_id=spam note over C1,S: クライアント1 WebRTC 確立 A->>S: ChangeMode API<br/>mode=block_new_session note over S: モード: block_new_session break 接続失敗 C2->>S: "type": "connect"<br/>channel_id=ham end C3->>S: "type": "connect"<br/>channel_id=spam note over C3,S: クライアント3 WebRTC 確立