最終更新:
編集

レート制限

rippledサーバはAPIクライアントが公開APIにリクエストできるレートを制限できます。レート制限はクライアントのIPアドレスに基づいて行われるため、ネットワークアドレス変換の背後にいるクライアントは公開IPアドレスに基づく制限を共有します。

ヒント
レート制限は、クライアントが管理者として接続されているときには適用されません

クライアントがレート制限に近づいている場合、サーバはAPIレスポンスのトップレベルにフィールド"warning": "load"というフィールドをAPIレスポンスのトップレベルに追加します。この警告はすべてのレスポンスに追加されるわけではありませんが、サーバはクライアントを切断する前に何度かこのような警告を送ることがあります。

クライアントがレート制限を超えると、サーバはそのクライアントを切断し、しばらくの間、クライアントのAPIアドレスからのリクエストを受け付けません。WebSocket APIとJSON-RPC APIでは、異なる切断メッセージを使用します。

WebSocket APIの切断メッセージ

WebSocket APIの場合、サーバは接続を閉じ、切断メッセージとコードを提供します。これらのメッセージにアクセスする方法は、WebSocket クライアントの実装に依存します。例えば、Node.js ws ライブラリを使用する場合、次のコードは切断時に切断理由を表示します。

const WebSocket = require('ws')
const ws = new WebSocket('ws://localhost:6007/')
ws.on('close', (code,reason) => {
  console.log("Disconnected. \ncode: ", code, "\nreason: ", reason)
})

// If rate limited, prints:
// Disconnected.
// code:  1008
// reason:  threshold exceeded

レート制限のために接続が切断された場合、切断コードは1008で、切断メッセージはthreshold exceededという文字列になります。

JSON-RPCのレート制限エラー

JSON-RPC APIリクエストの場合、クライアントがレート制限を超えると、サーバはHTTPステータスコード503 Service Unavailableでレスポンスします。このレスポンスには、サーバに負荷がかかっていることを示すテキスト(JSONではありません)の本文が含まれます。

503 Service Unavailable

Server is overloaded

リクエストあたりのレート

[ソース]

サーバは時間の経過とともに行われるリクエストの数に基づいてクライアントの使用率を計算し、サーバがリクエストにレスポンスするためにどれだけの作業をしなければならないかに基づいて、異なるタイプのリクエストに重みをつけます。subscribeメソッドpath_findメソッドに対するサーバからの後続メッセージもクライアントの使用率にカウントされます。

使用率は時間とともに指数関数的に低下するため、リクエストを自動的に行わないクライアントは、数秒から数分後にアクセスが回復します。

関連項目