Sınırlar ve hız sınırları¶
Her Gateway bağlantısının gönderdikleri, oturumunun ne kadar yaşadığı, aynı anda kaç komut çalıştırdığı ve TEBHOS'un ona ne kadarını yeniden oynattığı konusunda sınırları vardır. Bunlardan birini aşmak bağlantıyı bir kapanış koduyla kapatır, yükü atar veya değeri zorla uygun hale getirir. Her kesin neden kapanış nedenleri kaydında listelenir.
Bu sınırlar Gateway'e aittir. HTTP API sınırları Hız sınırları sayfasında açıklanır.
Aktarım ve kodlama¶
Protokol sürümü, yük sınırı ve sıkıştırma sözleşmesi Çerçeveleme bölümüne aittir. Gelen tek bir WebSocket mesajı hat üzerinde 4,096 bayt ve açıldıktan sonra ayrıca 4,096 bayt ile sınırlıdır; her iki sınırın aşılması da bağlantıyı 4002 ve Payload too large nedeniyle kapatır.
Açıldığında 10 MiB'yi aşan sıkıştırılmış bir mesaj 4002 ve Decompression failed nedeniyle kapanır.
Oturum yaşam döngüsü¶
Hello, 41,250 ms'lik bir heartbeat aralığı bildirir. Gateway heartbeat durumunu her 13,750 ms'de bir denetler. Son onaydan bu yana 37,125 ms (aralığın yüzde 90'ı) geçtiğinde İşlem Kodu (Opcode) 1 gönderir ve istemci buna hemen yanıt verir. Geçen süre 45,000 ms'yi aşmadan yeni bir onay kabul edilmezse bağlantı 4009 ve Heartbeat timeout nedeniyle kapanır.
Ayrı bir kimlik doğrulama son tarihi yoktur. Hiç kimlik doğrulamayan bir soketi yalnızca heartbeat kuralı kapatır.
Bağlantısı kesilen bir oturum 60,000 ms boyunca resume edilebilir kalır. Soket düştükten 5,000 ms sonra varlık durumu offline olarak yayımlanır. Bu pencere içinde başarılı bir Resume, oturumun en son seçtiği durumu geri yükler.
Bir kullanıcı hesabı en fazla 100 canlı oturum tutar. Sonraki bir Identify 4008 ve Too many sessions nedeniyle kapanır. Bir bot kimlik bilgisi bunun yerine aşağıdaki sunucu üst sınırıyla sınırlanır.
Shard sayıları 1'den 16,384'e kadardır. Bir bot shard'ı en fazla 2,500 sunucuyu kapsar. Hatalı biçimlendirilmiş bir shard çifti her kimlik bilgisi için 4010 ile kapanır. Sunucu üst sınırını aşan bir bot ataması 4011 ve Sharding required nedeniyle kapanır. Bir kullanıcı oturumu sunucu sayısı nedeniyle hiçbir zaman reddedilmez.
Oturum oluşturma gecikebilir
Bir Identify; düğüm boşaltılırken, düğüm kapasitesi doluyken, oturum başlatmaları duraklatılmışken, hesap oturum dağıtım yüzdesinin dışındayken veya API'nin oturum araması başarısız ya da hız sınırına takılmışken yanıtsız bekleyebilir. Ready'yi beklerken heartbeat göndermeye devam edin.
Oturum başlatma sınırı¶
GET /gateway/bot, istemci uyumluluğu için bir oturum başlatma sınırı nesnesi döndürür. Değerleri sabittir. Kabul aslında kaynak IP Identify bütçesi, token başına oturum arama bütçesi, kullanıcı başına oturum sayısı, düğümün eşzamanlı oturum başlatma kapasitesi ve dağıtım yüzdesiyle sınırlanır.
Bağlantı ve komut hız sınırları¶
Aşağıdaki değerler varsayılanlardır. Bir işletmeci bu sınırları bir dağıtım için devre dışı bırakabilir.
| Bütçe | Sınır | Aşıldığında |
|---|---|---|
| WebSocket başına istemci yükleri | Kayan 60 saniyelik pencerede 600 | 4008 ve Rate limited nedeniyle kapanır |
| Kimliği doğrulanmış oturum başına istemci yükleri | Her sabit 60 saniyelik kovada 600 | 4008 ve Rate limited nedeniyle kapanır |
| Kaynak IP başına istemci yükleri | Her sabit 60 saniyelik kovada 6,000 | 4008 ve Rate limited nedeniyle kapanır |
| Kaynak IP başına eşzamanlı WebSocket'ler | 256 | Hello'dan önce 4008 ve Too many connections nedeniyle kapanır |
| Kaynak IP başına Identify ve Resume denemeleri | Her sabit 60 saniyelik pencerede 300 | Yük yanıt verilmeden veya kapatılmadan atılır |
| Token başına oturum aramaları (API tarafı) | Dakikada 20 | Identify bekletilir ve arka planda yeniden denenir |
| WebSocket başına Presence Update | Kayan 20 saniyelik pencerede 5 | Güncelleme kapatma olmadan atılır |
| Oturum başına Voice State Update | Kayan her saniyede hemen uygulanan 2 | Sonraki güncellemeler kuyruğa alınır |
| Bot ve sunucu başına eksiksiz üye listesi istekleri | 30 saniyede 1 | Rate Limited Dispatch, chunk yok |
Oturum bütçesi yalnızca kimlik doğrulamadan sonra uygulanır. Boyut ve kod çözme denetimlerini geçen her yük, heartbeat'ler dahil, sayılır.
Atılan bir Identify veya Resume saklanmaz ya da yeniden denenmez; bu nedenle istemci, bütçe toparlandığında ve heartbeat son tarihi soketi kapatmadan önce yenisini kendisi gönderir.
Bir saniyedeki ilk ikisinin ötesindeki Voice State Update komutları, en fazla 64 komut tutan ve her 500 ms'de bir komut boşaltan oturum başına bir kuyruğa girer. Aynı guild_id ve connection_id çifti için daha yeni bir güncelleme kuyruktaki eski güncellemenin yerini alır; dolu bir kuyruk yenisini kabul etmeden önce en eski girişini atar.
Eksiksiz üye listesi bütçesi hesap ve sunucuya birlikte göre anahtarlanır; dolayısıyla yeniden bağlanmak onu sıfırlamaz.
Sınırlı komutlar¶
Bir WebSocket; Request Guild Members, Lazy Request, Request Guild Counts ve Request Channel Member Counts genelinde aynı anda en fazla dört sınırlı isteği işler. Her isteğin 10,000 ms'lik bir son tarihi vardır; bu süreden sonra durur. Zaten yayılmış olaylar geri alınmaz; bu nedenle sonucunu birkaç olayda yayan bir komut kısmi bir sonuç iletip ardından durabilir.
Request Guild Members, başka bir üye isteği etkinken değiştirilebilir bir bekleyen istek tutar. En son gelen ek istek önceki bekleyen isteğin yerini alır ve etkin istek bittiğinde başlar.
Dört yuvanın da dolu olduğunu gören sınırlı bir komut atılır. Kuyruk, sonuç olayı veya kapatma yoktur.
Request Guild Counts, genel 3,000 ms'lik bir toplu işlem son tarihi altında her sunucuyu 2,000 ms'lik bir son tarihle sorgular. Request Channel Member Counts sunucusunu 2,000 ms'lik bir son tarihle sorgular. Son tarihini kaçıran bir sunucu sonuçtan çıkarılır.
Yeniden oynatma ve geri basınç¶
Resume geçmişi en fazla 4,096 Dispatch olayı ve 16,777,216 bayt (16 MiB) saklanan olay verisi tutar. Bu sınırlardan biri aşıldığında en eski saklanan olaylar arabelleğin başından atılır.
2,097,152 bayttan (2 MiB) büyük tek bir Dispatch sokete iletilir ve hiçbir zaman saklanmaz. Bağlantı bu yüzden kapatılmaz; dolayısıyla böyle bir olayın ötesinde resume yapan istemci onu yeniden almaz. Her iki bayt sınırı da hat baytlarını değil bellek içi boyutu ölçer; bu nedenle yaklaşıktır.
Guild Members Chunk, Guild Sync ve Guild Member List Update canlı olarak iletilir ve hiçbir zaman saklanmaz. Bu nedenle bir yeniden oynatmada, saklama penceresi içinde bile sıra numarası boşlukları olabilir.
Sıra numarası içeren bir heartbeat, o sıra numarası veya altındaki tüm saklanan Dispatch olaylarını atar ve onu onaylanmış sıra numarası olarak kaydeder. İstemci yalnızca olaylarını işlemeyi bitirdiği bir sıra numarasını onaylamak ZORUNDADIR. null içeren bir heartbeat ve onaylanmış sıra numarasının altında bir sıra numarası içeren heartbeat hiçbir şeyi değiştirmez. Resume ne onaylar ne de çıkarır. Hiçbir zaman sıra numarasıyla heartbeat göndermeyen bir istemci, sayı veya bayt sınırı baştan çıkarana kadar penceresinin tamamını korur.
Resume, onaylanmış sıra numarasının altındaki bir seq değerinde ve oturumun geçerli sıra numarasının üstündeki bir seq değerinde 4007 ile kapanır.
Çıkarmalar sessizdir
TEBHOS bir yeniden oynatma tabanı tutmaz. Sayı veya bayt sınırı sizin seq değerinizin üstündeki olayları çıkardığında Resume yine başarılı olur ve yalnızca kalan olayları yeniden oynatır; Invalid Session veya eksik aralık için bir işaret olmaz. Geride kaldıktan çok sonra yeniden bağlanan bir istemci resume yapmak yerine yeniden Identify yapmalı ve durumunu Ready'den yeniden oluşturmalıdır.
Varlık (presence) güncellemeleri yük altında bağlantı kapatılmadan atılabilir.
Komut yükü sınırları¶
| Komut | Sınır | İşleme |
|---|---|---|
Identify ignored_events |
256 giriş | Daha uzun bir dizi 4002 ve Invalid identify payload nedeniyle kapanır |
Request Guild Members user_ids |
100 kimlik | Daha uzun bir dizi isteği iptal eder |
Request Guild Members limit |
0 ile 100 arası | Sıkıştırılır |
Request Guild Members nonce |
32 bayt | Aşırı büyük bir nonce null olur. Yalnızca istek tam olarak bir sunucu belirttiğinde geri yansıtılır |
| Lazy Request üye listesi aralıkları | Kanal başına 10, end en fazla 100,000, end - start en fazla 99 |
Geçersiz aralıklar atılır ve fazla geçerli aralıklar kesilir |
Lazy Request members |
Sunucu başına 1,000 kimlik | Geçersiz kimlikler atılır ve fazla kimlikler kesilir |
Request Guild Counts guild_ids |
Tekrarlar ayıklandıktan sonra 100 | Kesilir |
Request Channel Member Counts channel_ids |
Tekrarlar ayıklandıktan sonra 25 | Kesilir |
Sayım isteği nonce |
1 ile 64 bayt arası | Sınırların dışındaysa sonuçtan çıkarılır |
Her alan için kesin zorlama veya atma kuralı İstemci komutları sayfasında belirtilir.
Ses kabulü¶
Ses kabulü, kapsayan sunucu, DM, grup DM, kanal ve izin kurallarını izler. Bir red hiçbir olay üretmez ve hiçbir şeyi kapatmaz. Sınırların tamamı Ses sayfasında belirtilir.
Bir sunucu ses kanalı en fazla user_limit kullanıcı kabul eder; 0 sınırsız anlamına gelir. Herhangi bir katılımcının kamerası açıkken kanal toplamda en fazla 25 kullanıcı kabul eder ve kamerası açık 25 kullanıcıyı zaten barındıran bir kanal ek bir kamerayı VOICE_CAMERA_USER_LIMIT ile reddeder.
Bir kullanıcı tek bir sunucu ses kanalında en fazla voice_connection_limit eşzamanlı ses bağlantısı tutar. Bu alan kanal nesnesinin bir parçasıdır, varsayılanı 5'tir ve 1 ile 100 arasına sıkıştırılır. Henüz süresi dolmamış bekleyen bağlantılar da bu sınıra sayılır.