Bütün Ping yazıları

Teknik · Oyun durumu

Hamleleri paketleyerek veri trafiğini azaltmak

Aktif tavla durumunu daha küçük payload'larla taşıyan packed-state yaklaşımı ve authoritative action modelimiz.

Yol hikâyesi2 dk
Hamleleri paketleyerek veri trafiğini azaltmak için Ping kapak görseli

Aynı tahtayı tekrar tekrar göndermenin maliyeti

Canlı bir oyunda her zar, pul hareketi, sıra değişimi ve mesaj yeni durum üretir. Bütün state'i açıklayıcı JSON alanlarıyla tekrar göndermek geliştirme sırasında rahattır; fakat oyuncu ve oyun sayısı arttıkça gereksiz trafik ve Redis komutu oluşturur.

Tahta, sıra, zarlar ve oyun bayraklarını bit seviyesinde 24 byte'a paketleyip Base64URL karakterlerine dönüştüren packed state kullandık. Ağda ve aktif oyun deposunda 32 karakterlik, URL ve metin ortamlarında güvenli tek bir string taşınırken uygulama sınırında tekrar okunabilir oyun modeline açılıyor.

Paketleme, kriptografik hash değildir

Bu yaklaşım bazı konuşmalarda hamleleri hashlemek, hatta Base32 diye kısaltılsa da gerçek uygulama Base64URL kullanıyor. Amaç gizlemek değil veriyi deterministik ve küçük temsil etmektir. Base64URL bir şifreleme veya kriptografik hash değildir; altı bitlik grupları URL güvenli bir karakter alfabesiyle taşınabilir hale getiren encode katmanıdır. Güvenlik, hamleyi sunucuda mevcut durum ve oyun kurallarıyla doğrulamaktan gelir.

Her action benzersiz kimlik ve sıra bilgisi taşır. Aynı istek tekrar geldiğinde idempotency kontrolü ikinci kez hamle uygulamak yerine mevcut sonucu döndürür.

Ölçmeden optimizasyon tamamlanmış sayılmaz

Başlangıç tahtasının yalın JSON karşılığı 725 byte tutuyor. Aynı semantik durum 24 byte'a paketlenip 32 karakterlik Base64URL stringi olarak taşındığında payload 32 byte oluyor; bu örnekte yaklaşık yüzde 95,6 küçülme sağlıyor. Sabit uzunluklu yapıda durum alanlarına ek olarak sürüm ve CRC-16 bütünlük kontrolü de bulunuyor.

Bu küçülme replay'i oyun bittikten sonra kurulan ayrı bir kayıt olmaktan çıkardı. Canlı oyun sırasında oluşan canonical action bar zaten oynatılabilir bir geçmiş taşıyor. Her action içinde ekonomik biçimde state snapshot tutulabildiği için önceki zar, hamle ve konuşma bağlamına ileri-geri gidilebiliyor.

RE-PING

Bu yazıyı paylaş

Bağlantıyı kopyalayabilir veya kullandığın sosyal platformda yeniden paylaşabilirsin.

XLinkedInFacebookWhatsApp

PONG

Pong sende

Yorum eklemek için bu yazının ilişkili X gönderisine cevap ver.