mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-08 16:36:15 +00:00
commit 90f285d7f6bcd926ce9ca3d5832b1d70a5eae6ab Author: JKorf <jankorf91@gmail.com> Date: Sun Jun 25 19:51:12 2023 +0200 Docs commit 72187035c703d1402b37bd2f4c3e066706f28d67 Author: JKorf <jankorf91@gmail.com> Date: Sat Jun 24 16:02:53 2023 +0200 docs commit 8411977292f1fb0b6e0705b1ad675b79a5311d90 Author: JKorf <jankorf91@gmail.com> Date: Fri Jun 23 18:25:15 2023 +0200 wip commit cb7d33aad5d2751104c8b8a6c6eadbf0d36b672c Author: JKorf <jankorf91@gmail.com> Date: Fri Jun 2 19:26:26 2023 +0200 wip commit 4359a2d05ea1141cff516dab18f364a6ca854e18 Author: JKorf <jankorf91@gmail.com> Date: Wed May 31 20:51:36 2023 +0200 wip commit c6adb1b2f728d143f6bd667139c619581122a3c9 Author: JKorf <jankorf91@gmail.com> Date: Mon May 1 21:13:47 2023 +0200 wip commit 7fee733f82fa6ff574030452f0955c9e817647dd Author: JKorf <jankorf91@gmail.com> Date: Thu Apr 27 13:02:56 2023 +0200 wip commit f8057313ffc9b0c31effcda71d35d105ea390971 Author: JKorf <jankorf91@gmail.com> Date: Mon Apr 17 21:37:51 2023 +0200 wip
74 lines
4.0 KiB
Markdown
74 lines
4.0 KiB
Markdown
---
|
|
title: Rate limiting
|
|
nav_order: 9
|
|
---
|
|
|
|
## Rate limiting
|
|
The library has build in rate limiting. These rate limits can be configured per client. Some client implementations where the exchange has clear rate limits will also have a default rate limiter already set up.
|
|
Rate limiting is configured in the client options, and can be set on a specific client or for all clients by either providing it in the constructor for a client, or by using the `SetDefaultOptions` on a client.
|
|
|
|
What to do when a limit is reached can be configured with the `RateLimitingBehaviour` client options, which has 2 possible options. Setting it to `Fail` will cause a request to fail without sending it. Setting it to `Wait` will cause the request to wait until the request can be send in accordance to the rate limiter.
|
|
|
|
A rate limiter can be configured in the options like so:
|
|
```csharp
|
|
new ClientOptions
|
|
{
|
|
RateLimitingBehaviour = RateLimitingBehaviour.Wait,
|
|
RateLimiters = new List<IRateLimiter>
|
|
{
|
|
new RateLimiter()
|
|
.AddTotalRateLimit(50, TimeSpan.FromSeconds(10))
|
|
}
|
|
}
|
|
```
|
|
|
|
This will add a rate limiter for 50 requests per 10 seconds.
|
|
A rate limiter can have multiple limits:
|
|
```csharp
|
|
new RateLimiter()
|
|
.AddTotalRateLimit(50, TimeSpan.FromSeconds(10))
|
|
.AddEndpointLimit("/api/order", 10, TimeSpan.FromSeconds(2))
|
|
```
|
|
This adds another limit of 10 requests per 2 seconds in addition to the 50 requests per 10 seconds limit.
|
|
These are the available rate limit configurations:
|
|
|
|
### AddTotalRateLimit
|
|
|Parameter|Description|
|
|
|---------|-----------|
|
|
|limit|The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1|
|
|
|perTimePeriod|The time period over which the limit is enforced|
|
|
|
|
A rate limit for the total amount of requests for all requests send from the client.
|
|
|
|
### AddEndpointLimit
|
|
|Parameter|Description|
|
|
|---------|-----------|
|
|
|endpoint|The endpoint this limit is for|
|
|
|limit|The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1|
|
|
|perTimePeriod|The time period over which the limit is enforced|
|
|
|method|The HTTP method this limit is for. Defaults to all methods|
|
|
|excludeFromOtherRateLimits|When set to true requests to this endpoint won't be counted for other configured rate limits|
|
|
|
|
A rate limit for all requests send to a specific endpoint. Requests that do not fully match the endpoint will not be counted to this limit.
|
|
|
|
### AddPartialEndpointLimit
|
|
|Parameter|Description|
|
|
|---------|-----------|
|
|
|endpoint|The partial endpoint this limit is for. Partial means that a request will match this limiter when a part of the request URI path matches this endpoint|
|
|
|limit|The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1|
|
|
|perTimePeriod|The time period over which the limit is enforced|
|
|
|method|The HTTP method this limit is for. Defaults to all methods|
|
|
|countPerEndpoint|Whether all requests matching the endpoint pattern should be combined for this limit or each endpoint has its own limit|
|
|
|ignoreOtherRateLimits|When set to true requests to this endpoint won't be counted for other configured rate limits|
|
|
|
|
A rate limit for a partial endpoint. Requests will be counted towards this limit if the request path contains the endpoint. For example request `/api/v2/test` will match when the partial endpoint limit is set for `/api/v2`.
|
|
|
|
### AddApiKeyLimit
|
|
|Parameter|Description|
|
|
|---------|-----------|
|
|
|limit|The request weight limit per time period. Note that requests can have a weight specified. Default requests will have a weight of 1|
|
|
|perTimePeriod|The time period over which the limit is enforced|
|
|
|onlyForSignedRequests|Whether this rate limit should only be counter for signed/authenticated requests|
|
|
|excludeFromTotalRateLimit|Whether requests counted for this rate limited should not be counted towards the total rate limit|
|
|
|
|
A rate limit for an API key. Requests with the same API key will be grouped and limited. |