|
Document of c-modernization-kit (porter) 1.0.0
|
本ドキュメントは porter の主要な動作シナリオをシーケンス図で示します。
potrOpenService() を SENDER として呼び出したときの内部処理です。
potrOpenService() を RECEIVER として呼び出したときの内部処理です。
POTR_SEND_BLOCKING を指定せずに potrSend() を呼び出したときのデータフローです。
POTR_SEND_BLOCKING を指定して potrSend() を呼び出したときのデータフローです。 送信完了まで potrSend() が返りません。
送信データが max_payload を超える場合の分割・結合処理です。
パケットロスが発生した場合の再送シーケンスです。
reorder_timeout_ms を 0 より大きな値に設定すると、欠番検出後にただちに NACK や DISCONNECTED を発行せず、指定時間だけ待機します。待機中に欠落パケットが届いた場合は NACK/DISCONNECTED を発行せずに正常配信します。
送信ウィンドウから evict 済みのパケットを要求した場合のシーケンスです。
ヘルスチェックが有効な場合の定周期 PING 送信です。
PING が届かなくなった場合の切断検知と復帰です。
potrCloseService() による正常終了シーケンスです。
DATA パケットの追い越し (欠落) を検出した場合のシーケンスです。
PING の seq_num から欠落パケットを検出した場合のシーケンスです。
POTR_TYPE_UNICAST_BIDIR における双方向データ通信のシーケンスです。 両端が独立したセッションを持ち、それぞれがデータ送受信・NACK・ヘルスチェックを行います。
POTR_TYPE_UNICAST_BIDIR を N:1 モードで開いたサーバが、新規クライアントを受け付けて peer_id ごとに通信するシーケンスです。
サーバは FIN 受信、potrDisconnectPeer()、またはヘルスチェックタイムアウトによりピア単位で切断を処理します。
POTR_TYPE_UNICAST_BIDIR において、相手側が停止した場合の切断検知シーケンスです。1:1 モードでは相手端単位、N:1 モードでは各 peer_id 単位で last_recv_tv_sec を監視し、health_timeout_ms 超過で切断を検知します。
potrOpenService() を TCP SENDER として呼び出したときの内部処理です。 potrOpenService() はすぐに返り、接続確立は connect スレッドが非同期に行います。
potrOpenService() を TCP RECEIVER として呼び出したときの内部処理です。
TCP SENDER / RECEIVER 間の正常な接続確立・データ送信・切断シーケンスです。
SENDER プロセスが再起動した場合に自動再接続が行われるシーケンスです。
RECEIVER のアプリケーション層がハングした場合に SENDER が切断を検知するシーケンスです。 TCP 接続は OS レベルで生存していてもアプリ層の PING 応答が途絶えることで検知します。
SENDER のアプリケーション層がハングして PING 送信が停止した場合に RECEIVER が切断を検知するシーケンスです。 TCP 接続は OS レベルで生存していても、PING 要求が届かなくなることで RECEIVER が検知します。
path 数 = 2 の例。RECEIVER が 2 つの listen ソケットを用意し、SENDER が各 path に接続します。 最初の 1 本が接続した時点で POTR_EVENT_CONNECTED が発火します。
1 本の path が切断しても残りの path で通信を継続します。 POTR_EVENT_DISCONNECTED は発火しません。
全 path が切断した時点で POTR_EVENT_DISCONNECTED が発火します。