Hız sınırları
Bu sayfa, Open Play’in bugün uyguladığı hız sınırlarını (rate limit) ve 429 aldığınızda ne yapacağınızı anlatır. Önemli bir dürüstlük notu: API anahtarı başına genel bir hız sınırı yoktur. Sınırlar belirli işlemlere (giriş, kayıt, sohbet, eklenti komutu, soket bağlantısı) konmuştur; geri kalan uçlar sınırsızdır ve yükü sizin yönetmeniz gerekir.
Bilinmesi gerekenler
- Genel bir “dakikada N istek” kotası yok. Sunucu anahtarıyla yapılan çağrılar için anahtar ya da ortam başına genel sınır bulunmaz.
- Sayaçlar Redis’te tutulur ve Redis’e ulaşılamazsa sınır uygulanmaz (fail-open); tek istisna, aşağıda belirtilen denetim satırı tavanıdır. Sınırı tek başına güvenlik kontrolü olarak kullanmayın.
Retry-Afterbaşlığı yalnız eklenti429’unda (60 sn) ve503yanıtlarında (30 sn) vardır. Çekirdek ve kimlik uçlarının429’uRetry-Aftertaşımaz; kendi geri çekilmenizi uygulayın.- İstemci IP’si, kimlik uçlarındaki sınırların anahtarıdır. Ters vekil istemci IP’sini iletmiyorsa tüm oyuncular aynı kovayı paylaşır (üretim kontrol listesi).
Kimlik uçları (oyuncu giriş hattı)
Bu sınırlar servis katmanında uygulanır; REST’in kendisinde de aynıdır. Pencere sabittir (ilk istekle başlar ve süre dolunca sayaç sıfırlanır; kayan pencere değildir); aşım 429 ve düz metin rate limited döner (Retry-After yok).
| Kova | Limit | Pencere | Anahtar | Hangi uçlar |
|---|---|---|---|---|
| Misafir açma | 30 | 60 sn | İstemci IP’si | POST /v1/auth/sign-in/guest (yeniden giriş de sayılır) |
| E-posta girişi | 5 | 60 sn | İstemci IP’si | POST /v1/auth/sign-in/email (her deneme) |
| Başarısız giriş kilidi | 10 | 900 sn | Adres + IP | Yanlış parola denemeleri; başarılı girişte hak iade edilir; parola değiştirmede yanlış mevcut parola da sayılır |
| Kayıt (IP) | 10 | 60 sn | İstemci IP’si | POST /v1/auth/sign-up/email, misafir terfisi |
| Kayıt (oturum) | 30 | 60 sn | Oturum sahibi | POST /v1/auth/guest/upgrade/email |
| Kayıt (adres) | 5 | 900 sn | E-posta adresi | Kayıt ve terfi |
| Parola değiştirme (IP) | 10 | 60 sn | İstemci IP’si | POST /v1/auth/change-password |
| Parola değiştirme (hesap) | 6 | 60 sn | Oyuncu | POST /v1/auth/change-password |
| Kurtarma (IP) | 5 | 60 sn | İstemci IP’si | forgot-password, reset-password, sign-in/magic-link (üç uç tek kovayı paylaşır) |
| Kurtarma (adres) | 5 | 900 sn | E-posta adresi | forgot-password, sign-in/magic-link |
| OAuth başlangıcı | 30 | 60 sn | İstemci IP’si | sign-in/oauth/{provider}, link/{provider} |
| OAuth dönüşü | 60 | 60 sn | İstemci IP’si | callback/{provider} |
Ek olarak:
| Sınır | Limit | Anahtar | Not |
|---|---|---|---|
| Görünen ad değiştirme | 10 / 3600 sn | Oyuncu | POST /v1/auth/session/display-name; aşım 429 |
| Hesap silme denemesi | 5 / 3600 sn | Oyuncu | POST /v1/auth/account/delete; aşım 429 |
| Başarısız giriş denetim satırı | 20 / 3600 sn | Hesap | Girişi reddetmez; yalnız arka plan denetim kaydını kısar. Redis kesintisinde kayıt atlanır (fail-closed) |
Not
Misafir açma kovası IP başınadır. Ters vekil istemci IP’sini iletmiyorsa ya da bir NAT/yurt ağı arkasından çok oyuncu bağlanıyorsa 30 misafir/dakika sınırı hızla dolar. Bir lansman ya da yük testi planlıyorsanız IP iletimini doğrulayın.
Sohbet ve bildirim
| Sınır | Limit | Pencere | Anahtar | Aşılınca |
|---|---|---|---|---|
| Sohbet mesajı gönderme | 20 | 10 sn | Ortam + oyuncu | REST’te 429; sohbet soketinde message_rejected |
| Bildirim teslimi | 60 | 60 sn | Ortam + oyuncu | Teslim ertelenir (sağlayıcıya inilmez), oyuncuya hata dönmez |
Eklenti komutları
Eklenti komut ve sorguları oyuncu başına, kova başına dakikalık bütçelere tabi olabilir. Bütçeyi eklenti tanımlar; sunucu bunu REST, realtime komutu ve gRPC yolunda aynı kararla uygular. Aşım eklenti zarfıyla gelir: 429, code: "rate_limited", retryable: true, Retry-After: 60.
Bugün bütçe tanımlayan eklenti package-ride’dır: 60 sn’lik pencerede kova başına 6 ile 60 komut (ör. teslimat kabul/başlatma/tamamlama 12, giriş bonusu 10, görev ödülü ve garaj 30, çarpışma/yarış bahsi 60). Kova değerleri eklentiye özgüdür ve değişebilir; kesin sayılar için eklentinin belgesine bakın. Operatör bazı kovaları “gözlem” kipine alabilir; bu kipte aşım yalnız sayılır, komut reddedilmez.
Unity SDK’sında PluginClient.RetryAfter(hata) eklenti 429’u için 60 saniye döndürür.
Realtime soket
| Sınır | Değer | Aşılınca |
|---|---|---|
| Adres başına yeni bağlantı | 30 / dakika | Yükseltme reddedilir |
| Adres başına açık soket | 8 | CapacityExceeded, soket kapanır |
| Oyuncu başına açık soket | 4 | CapacityExceeded, soket kapanır |
| Bağlantı başına çerçeve hızı | 40/sn (160 çerçevelik patlama payı) | CapacityExceeded (retryable: true), soket kapanır |
Ayrıntı: yeniden bağlanma ve limitler.
429 aldığınızda
HTTP/1.1 429 Too Many Requests
Content-Type: text/plain; charset=utf-8
rate limited
Eklenti ucunda:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60
x-request-id: 0192a3b4-0000-7000-8000-0000000000d1
{"code":"rate_limited","message":"rate limited","retryable":true,"requestId":"0192a3b4-0000-7000-8000-0000000000d1"}
Retry-Aftervarsa o kadar bekleyin; yoksa üstel geri çekilme kullanın (ör. 1, 2, 4, 8 sn; üst sınır 30 sn) ve rastgele bir sapma (jitter) ekleyin.- İstek değiştiriciyse aynı
Idempotency-Keyile tekrar edin (idempotency ve eşzamanlılık). - Kullanıcı eylemiyle tetiklenen sınırlarda (giriş, kayıt) otomatik tekrar yerine kullanıcıya bekleme süresini gösterin; parola ve kayıt uçlarında otomatik tekrar kilit süresini uzatır.
CrxClient(sunucu anahtarı)429’u,GETve anahtarlı isteklerde,Retry-After’a saygı göstererek kendisi yeniden dener (varsayılan 2 deneme).
Uyarı
Kural bütçesi aşımı da (
rule budget exceeded: <kural>)429döner; bu bir hız sınırı değil, kural motoru bütçesidir (komut başına 50 kural, 200 eylem, 500 değerlendirme düğümü ve zincir derinliği 5). Yeniden deneme sonuç değiştirmez; kuralı sadeleştirin (oyun kuralları).
Kendi tarafınızda yapmanız gerekenler
Genel bir sunucu sınırı olmadığı için büyük yükte sizin koruma eklemeniz gerekir:
- Sunucudan sunucuya toplu işlerde eşzamanlılığı sınırlayın (ör. aynı anda 5 ile 10 istek) ve hataları geri çekilmeyle yönetin.
- Anahtar bazında istek hızını kendi tarafınızda ölçün; tek bir sızmış anahtar sınırsız çağrı yapabilir (güvenlik).
- Lansman öncesi
GET /v1/…okumalarını önbelleğe alın (katalog uçlarıETagveIf-None-Matchile koşullu okumayı destekler; oyuncu başına yoklamayı 15 sn’den sık yapmayın).