キャッシュサーバのコントロールプロセスとのネゴシエーション
リレーサーバ(sl_relay)が -cs, -cp または -cg オプション付で起動された場合,UDPの中継プロセス毎にキャッシュサーバ(sl_cache)のコントロールプロセスにTCPによる接続を行います.その後,キャッシュサーバのコントロールプロセスとネゴシエーションを行い,通信に必要なお互いのポート番号や接続用パスワードの交換を行います.
ネゴシエーションに失敗した場合は,そのUDP中継プロセスは,キャッシュサーバを使用しないモードに自動的に移行します.
キャッシュPUTサーバへのデータ転送
sl_relay が -cs または -cp オプション付で起動された場合,sl_relayのUDP中継プロセスはSecond Life(SIM)サーバから受け取った全てのテクスチャデータ(ImageData, ImagePacket) を,対になっているキャッシュPUTサーバ用の中継プロセスへ転送します.
転送(キャッシング)は全て自動で行われるため,ユーザ(sl_relayの実行者も)は何も意識する必要はありません.
キャッシュコントロールプロセスへのリクエスト
sl_relayが -cs または -cg オプション付で起動されている場合,UDP中継プロセスは Viewerからのテクスチャデータのリクエスト(RequestImage)をトラップし,キャッシュコントロールプロセスへテクスチャデータがキャッシュされているかどうかの確認を行います.Viewerからのリクエストが複数のテクスチャデータに関するもので,一部のみキャッシュされている場合は,リクエストを分解し,キャッシュされていないテクスチャに関するリクエストはそのまま Second Life(SIM)サーバへ転送します.
キャッシュされているテクスチャデータに関しては,そのデータのリクエストをキャッシュコントロールプロセスへ発行します.キャッシュコントロールプロセスから返されるテクスチャデータに関しては,Second Life(SIM)サーバからのテクスチャデータと同様に扱われます.
受信したテクスチャデータに関する Viewerからの ACK信号もトラップされます.ACK信号が複数のACK情報を含む場合は,ACK信号は分解され,テクスチャデータの送信元に合わせて返送されます.
このため,sl_relayではパケットのシーケンス番号の書き換え機能の他に,テクスチャデータとACKの対応のためのリングバッファを利用した ACKのシーケンス番号書き換え機能を実装しています.