Geliştirme günlüğü alt yapı hazırlamak isteyen birileri fikir edinebilir

  • Konuyu açan Konuyu açan mt2go2
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 1K

mt2go2

Üye
Üye
Mesaj
203
Çözümler
2
Beğeni
96
Puan
464
Ticaret Puanı
0

kaynak​

Linkleri görebilmek için giriş yap veya kayıt ol.

Günlük #1​

Google Protocol Buffers (Protobuf) / Flatbuffers​


Metin2 tarihinde bir ilk olarak sunucu ve istemci dahil tüm ağ altyapısını tamamıyle Google Protocol Buffers'a geçirdim. Bu işlem ile Metin2'nin 450 den fazla ağ paketlerini teker teker refaktörize edip sıfırdan yazdım. Peki protocol buffers tam olarak nedir? Protocol Buffers Google tarafından üretilmiş bir ağ protokolü oluşturma ve yönetme kütüphanesidir ve ayrıca Google’ın kendi içindeki veri iletişiminde de bolca kullandığı bir veri transfer protokolüdür. Bu kütüphane/protokolü CS:GO, League of Legends, GTA V gibi AAA+ oyunlar ve yapımcısı olan şirketler kullanmaktadır. Metin2 altyapısı 20 senelik bir altyapı olduğu için o zamanlarda tabii ki bu protokol yoktu, herkes manuel olarak paket protokolü yazıyordu. Fakat modern zamanlarda bu işler tamamen değiştiği için değişime ayak uydurmak gerekiyor.

Protokoller / Paketler ne hakkında konuşuyorsun? Protokoller (TCP/UDP) aracılığı ile sunucu ile siz oyuncular arasında bir tünel bağlantısı oluşturulur, bu tünel bağlantısı içinde örneğin oyunda yazacağınız bir chat istemci (client) tarafından 'encode' (şifrelenir/sıkıştırılır) edilir ve ardından sunucuya protokolünüze bağlı olarak 'paket' gönderilir. Ardından sunucu bu paketi 'decode' (deşifre) ederek sizin tam olarak oyunda ne yapmaya çalıştığınızı anlar. Bu paketler eski 20 yıllık Metin2 altyapısında manuel olarak el ile yazılmış ve statik ve dinamik paketlerin yazılması veya yönetilmesi çok meşakatli iş ve en küçük yaptığınız hatada komple sunucuyu elinize almanız hiç kaçınılmaz değil. Google Protobuf ile Metin2 TC'ye özel olarak bir bağlantı protokolü oluşturduk. Bu kendi özel protokollerimiz sayesinde altyapıda var olan paket (örneğin, rasgele olarak oyundan atma gibi) sorunlarının TAMAMINI düzeltmiş ve gelecekte ekleyeceğimiz sistemlerde oluşabilecek herhangi bir sorunu da tamamen çözmüş olduk ve olmasını da engelledik.

Protobuf'ın özellikleri sadece işimizi kolaylaştırmakla, oluşabilecek sorunları da engellemekle de kalmıyor ek olarak siz ve sunucu arasında oluşacak olan paket trafiğini de sıkıştırıyor ve sunucudan gelecek paketleri ek olarak opsiyonlayabiliyor, örneğin eski sistemin bir paketinde karakter oyuna girdiği zaman fix olarak 24 (24 byte) karakterlik bir paket gönderiyor istemciye, Protobuf ile karakter adının uzunluğu ne kadarsa o kadar büyüklükte 'delimited' (parçalı) dinamik bir paket gönderiyor. Bu şekilde sunucu ve istemci arasındaki trafik çok önemli ölçüde azalmış oluyor, performans genel olarak artıyor ve daha keyifli oyununuzu oynamanıza olanak sağlıyor. Başka bir örnek olarak eski sistemde bir adet itemin envanterinize sunucu tarafından gönderildiğini düşünün, bunu da bir adet artı basma itemi olarak düşünelim, artı basma itemlerinde efsun, taş olmamasına rağmen sunucu yine bu paketleri size gönderiyor, buna bağlı olarak gereksiz trafik haliyle çok fazla oluyor. Yeni altyapımızda Google'ın teknolojisi sayesinde bu artı basma itemi envanterinize geldiğinde sadece boş bir item datası otomatik olarak gönderilecek. Eğer bu envanterinize gelen itemin efsunu varsa efsunları teker teker, taşları varsa yine teker teker spesifik, seçilmiş olarak gönderilecek.

Yeni Refaktörize Edilmiş / Modernleştirilmiş Kaynak Kodları​


Metin2 bahsettiğim üzere 20 yıl önce yazılmış bir oyun olduğu için, şuanki mevcut yazılım güncellemelerinden faydalanamıyorduk. Şimdi düşünün 20 yıl önce Nokia 3310 telefon kullanıyorduk ama bugün sadece ekranı 2K olan, 4 çekirdekli bir iPhone kullanıyoruz. Bundan 40-45 yıl önce Nokia 3310'in işlemcisi gücünde bir işlemciye sahip olan uzay aracı ile insanlık Aya ayak bastı. (Apollo Roketi yazılımı C ve işlemcisi) Hal böyle olunca yapımına başlanan Metin2, 2000'lerde, o zamanın 'son sürüm' olarak nitelendirdiği yazılım dili ve yazılım dilinin özellikleri ile 512mb RAM'in 8gb ram gibi olduğu dönemlerde bu oyunu yazdı... Fakat artık 20 sene önce o zamanın güncellemeriyle ve özellikleriyle yazılmış bir sistemin (C/C++) mevcut modern işlemcilerde ve grafik kartlarında kullanmak bile ayrı bir meşakat, ayrı bir zulüm çünkü 20 sene içinde C++'ye (Metin2'nin çoğu kısımlarının yazıldığı yazılım dili) on binlerce özellikler geldi ve yüzlerce güncelleme ve revizyon aldı.

Metin2 TC'nin altyapısının tamamını kendim C++20 ISO standartlarına göre tekrardan yazdım, standarda uymayan tüm daha önceden yazılmış sistem altyapılarını standarda uygun olarak revize ettim. Bu işlem testler ile beraber yaklaşık olarak 1,5-2 ay kadar sürdü, fakat şu an TC'nin altyapısı günümüz şartlarının teknolojilerini ve yazılım dilinin özelliklerinin ve potansiyellerinin tamamını kullanıyor.

Ayrıca Metin2 TC sunucu çekirdek sistemleri yine Metin2 tarihinde bir ilk olarak 6 ay önce 64 bit mimarisine geçirdim. 20 sene önce 64 bit yeni yeni çıkan bir işlemci mimarisi olduğu için tabii ki de Metin2 32 bit mimarisi için özel olarak yazılmıştı, fakat günümüz modern şartlarında 64 bit desteklemeyen işlemci kalmadığı ve işlemcilerin bile artık doğal olarak 64 bit mimarisine uygun şekilde üretildiği için, 32 bit olan bir yazılım 64 bit mimarisi olan bir sistemde ister istemez %10 kadar bir performans düşüşü yaşıyordu, artık Metin2 sunucu çekirdek sistemlerinin tümü doğal (native) olarak 64 bit işlemci mimarisine özel olarak çalışıyor ve gelecekte kullanacağımız aşırı güçlü sunucularımızın performansının tümünü etkin olarak kullanabileceğiz.
 
Son düzenleme:
20 sene önce diyorsunda senin elinde 20 sene öncenin değil 8 yıl öncenin dosyaları var ayrıca 20 yıl öncenin kodları elimizde olsa haklısın 64 bit işlemciler bir yoktu neredeyse ama sızdırılan dosyalar 2013 2014 yıllarının yani bu adamlar o yıla kadar uğraşmamış yada başka bir nedenden 64 bit derlemeye geçmemiş.
 
20 sene önce diyorsunda senin elinde 20 sene öncenin değil 8 yıl öncenin dosyaları var ayrıca 20 yıl öncenin kodları elimizde olsa haklısın 64 bit işlemciler bir yoktu neredeyse ama sızdırılan dosyalar 2013 2014 yıllarının yani bu adamlar o yıla kadar uğraşmamış yada başka bir nedenden 64 bit derlemeye geçmemiş.
İçerik sahibi ben değilim fakat.2014de dosyalar paylaşıldı 2014un dosyaları değildi
Dosyalar çok önceden hacklenerek çalındı ve paylaşılan dosyalar söylentiye göre metin 2nin yüzde 3 Luk kismiydi .ornegin speedtree 2001-2003 yıllarına ait v1.xx versiyon kullanılıyor.dosyalar güncel değil ve konuda paylaşılan Metin2 sourcesinin udp paketlerinin çok eski olduğundan bahsediyor.
tahminimce extern guncellemelerinden çok oyunda oyuncuları oyalayacak sistemler getirildi.
Ek bilgi
Mesela 2014 yılında paylaşılan dosyalarda birçok ölü kod var sistemi yazmış ama yarım bırakmış yada sistemi yazmış oyunda gözükmesin diye pythondan kodu silmiş.
 
İçerik sahibi ben değilim fakat.2014de dosyalar paylaşıldı 2014un dosyaları değildi
Dosyalar çok önceden hacklenerek çalındı ve paylaşılan dosyalar söylentiye göre metin 2nin yüzde 3 Luk kismiydi .ornegin speedtree 2001-2003 yıllarına ait v1.xx versiyon kullanılıyor.dosyalar güncel değil ve konuda paylaşılan Metin2 sourcesinin udp paketlerinin çok eski olduğundan bahsediyor.
tahminimce extern guncellemelerinden çok oyunda oyuncuları oyalayacak sistemler getirildi.
Ek bilgi
Mesela 2014 yılında paylaşılan dosyalarda birçok ölü kod var sistemi yazmış ama yarım bırakmış yada sistemi yazmış oyunda gözükmesin diye pythondan kodu silmiş.
O kadarını bilemem sızdıran adam ile konuşmadım sonuçta :) ölü kodlarda haklısın bir sürü kullanılmayan yarım bırakılmış şeyler var bunları temizlemekte dosyaları geliştiren kişiye kalıyor benim sildiğim kodların listesini tuttum baya bir silme işlemi falan yarım kalmışlar vs çok. Yani bilmiyorum dosyalar 2013 14 de internette paylaşıldı ama artık ne zaman çalınmıştır bilmiyorum elbette o yılların dosyaları değildi ama o kadarda eski olduğunu sanmıyorum. Mesela granny sürümü bile official 2014 client dosyalarında 2.4 speedtree 2001 2003 kalması normal :)
 
Geri
Üst