Reklam
Merhaba arkadaşlar. Mobile versiyon için kolları sıvayan arkadaşlardan birisi de benim. Ben kolları baya yukarı sıvadım yalnız. Serveri 0dan yazmaya başlamak gibi bir çılgınlık yaptım. Meraklısı veya araştırmak isteyen olur diye kısa bir bilgi geçeyim.
Server:
.NetCore Asenkron mimaride protobuf haberleşme ile geliştiriliyor. Henüz bir anticheat yazılmadı. Önbellekleme ihtiyacı olursa redis tercih etmeyi düşünüyorum.
Client:
Unity C#
Database:
SQL
Performans noktalarındaki araştırmaları yapmak isterseniz siz de bahsettiğim içerikleri araştırabilirsiniz. Server paketlerinin %70-80 civarını taşıdım yazdığım servera.
Şu an client için elimde UI ve Karakter animasyon paketleri olmadığından daha çok server ağırlıklı çalışıyorum. Yakın zamanda bir kaç görsel de paylaşacağım orjinal assetlerin kullanılmadığı. Merak ettikleriniz sormak istedikleriniz varsa çekinmeden sorabilirsiniz.
Kullanacağım teknolojiler konusunda kafam bulanıktı ama epey netleştirdim hocam. O dönem teknolojilere çok kafa patlatınca istemsiz kafam karıştı. Şu an ki güncel durum:Selamlar Hocam;
Öncelikle gayretlerin için tebrikler, Redis' i nerede nasıl kullanmayı planlamaktasınız onu tam anlayamadım, Socket yapısı kullanmanı öneririm asenkron mimari olarak onu bahsediyorsan doğrudur, Postresql daha sağlıklı oluyor büyük ve agresif yapılarda,
Linux sunucuda açmayı düşünüyordum. Sizce yeterli olur mu? İkisi arasında hiç performans testi yapmadım ama bu yönde çok tavsiye aldım. Bir de sunucuları bölmeyi düşünüyorum. Monstler için 1 sunucu, playerlar için ayrı bir sunucu. Database 1 sunucu ve sohbet ile log db ile de 4. Sunucu. Map koordinatları için sunucu düşünmüyorum o kısmı navmesh ile çözdüm gibi. Sunucu hızı ve varış noktasını belirleyip gelecek aksiyonu hazırlıyor. Mob o noktaya vardığında sunucu gerekli aksiyonu alıyor. Wonder(devkriye gezme mantığı) ve idle için test ettim çalıştı.postgre cok daha performanslı , .net core da sorun yokta ram sorun yapacak user sayısı arttıgında ramden silme x bi zamanda yaptıgı için dipsose da kullansan hert türlü ram şişmesi yapacak 1 2 k userda cok sorun olmaya bilri ama user cogaldıgında tcp işlemlerinde özellikle ram sorun yapar 10 20 k user kaldırmaz ama 1 2 k da cokta sorun cıkarmaz oda teknık olarak cozulur kubernets cakarsın micro servisle cozersn
Selamlar,Kullanacağım teknolojiler konusunda kafam bulanıktı ama epey netleştirdim hocam. O dönem teknolojilere çok kafa patlatınca istemsiz kafam karıştı. Şu an ki güncel durum:
Sunucu: .net8(JIT)
DB: Postgre SQL
Mesajlaşma: Messagepack
Soket olarak da .net kendi soketlerini kullanıyorum. İlk etapta SQL server ve protobuff ile başlamıştım. @rapix in tavsiyesini dinledim ve pişman değilim. Mesajlaşma işlemlerini çevirme biraz zaman aldı bir de mesajları listeleme ile yollamaya karar verdim. Her tick için sunucu veya istemci mesajları bir listede biriktirip lz4 sıkıştırarak yolluyor. Yani bir tick için gitmesi veya gelmesi gereken mesajlar toplu şekilde tek pakette git gel yapıyor her bir istemci için.
Special thanks @rapix sağol bro.
Gönderi otomatik olarak birleştirildi:
Linux sunucuda açmayı düşünüyordum. Sizce yeterli olur mu? İkisi arasında hiç performans testi yapmadım ama bu yönde çok tavsiye aldım. Bir de sunucuları bölmeyi düşünüyorum. Monstler için 1 sunucu, playerlar için ayrı bir sunucu. Database 1 sunucu ve sohbet ile log db ile de 4. Sunucu. Map koordinatları için sunucu düşünmüyorum o kısmı navmesh ile çözdüm gibi. Sunucu hızı ve varış noktasını belirleyip gelecek aksiyonu hazırlıyor. Mob o noktaya vardığında sunucu gerekli aksiyonu alıyor. Wonder(devkriye gezme mantığı) ve idle için test ettim çalıştı.
karşılaşacağın en büyük zorluklardan biri matematiksel fizik hesplarında olucak muhtemelen biz unty tarafında gameserverlar yazarken c# tarafında 60 fps sümüle ettiğimizde fizik işlemlerinin tammalanmasını tamamen 16 ms de halletmek gerekiyor lag yaşamamak için 1 sn 60 kez fizik hesabı lagsız basitce 16ms *60 ms de bütün hesaplamaların bitmesi gerek 1 2 k da 16 ms i geçmeybilir ama 5 10 k da muhtemelen 16 ms işlem süresi c# tarafında geçiçiek buda lag ve takılma dediğimiz sorunları oluşturuacak o yüzde c# tarafı server tarafında pek tercih edilmiyor olmazmı olur tabiki ama gameserver için mmolarda kullanıla harita map mantığı yapmalısın basit mantıkta oyunu karelere bolup her kare 1 server gibi düşünebilirsin örnegın maradonun tam ortasında her tarafa eşit karelere bolup ona göre içindeki userları ve fizikleri hesaplamak igbi düşünebilrisin yada maradaon 1 sw olur oradan tüm işlemler için 1 servis ayaga kaldırırsın işte cz 1 server gibi albion bildiğim karadırya photonserver kullanıyor oda oda mantıgı yapmıslar zone degıstıkce oyuncular o server a baglanıp işlemleri yapılıyor birde son zamanlarda unityinin kendi gameserver mantıgı var ama onu denemedim birde c#daki garbege ile cok ugrasacaksınKullanacağım teknolojiler konusunda kafam bulanıktı ama epey netleştirdim hocam. O dönem teknolojilere çok kafa patlatınca istemsiz kafam karıştı. Şu an ki güncel durum:
Sunucu: .net8(JIT)
DB: Postgre SQL
Mesajlaşma: Messagepack
Soket olarak da .net kendi soketlerini kullanıyorum. İlk etapta SQL server ve protobuff ile başlamıştım. @rapix in tavsiyesini dinledim ve pişman değilim. Mesajlaşma işlemlerini çevirme biraz zaman aldı bir de mesajları listeleme ile yollamaya karar verdim. Her tick için sunucu veya istemci mesajları bir listede biriktirip lz4 sıkıştırarak yolluyor. Yani bir tick için gitmesi veya gelmesi gereken mesajlar toplu şekilde tek pakette git gel yapıyor her bir istemci için.
Special thanks @rapix sağol bro.
Gönderi otomatik olarak birleştirildi:
Linux sunucuda açmayı düşünüyordum. Sizce yeterli olur mu? İkisi arasında hiç performans testi yapmadım ama bu yönde çok tavsiye aldım. Bir de sunucuları bölmeyi düşünüyorum. Monstler için 1 sunucu, playerlar için ayrı bir sunucu. Database 1 sunucu ve sohbet ile log db ile de 4. Sunucu. Map koordinatları için sunucu düşünmüyorum o kısmı navmesh ile çözdüm gibi. Sunucu hızı ve varış noktasını belirleyip gelecek aksiyonu hazırlıyor. Mob o noktaya vardığında sunucu gerekli aksiyonu alıyor. Wonder(devkriye gezme mantığı) ve idle için test ettim çalıştı.
C# soket haberleşmesine yardımcı olabilirsen gerisini ben de yapabiliyorum login sonrası pek haberleştiremedim server list gördüm karakter seçtiripoyuna sokamadımçMerhaba arkadaşlar. Mobile versiyon için kolları sıvayan arkadaşlardan birisi de benim. Ben kolları baya yukarı sıvadım yalnız. Serveri 0dan yazmaya başlamak gibi bir çılgınlık yaptım. Meraklısı veya araştırmak isteyen olur diye kısa bir bilgi geçeyim.
Server:
.NetCore Asenkron mimaride protobuf haberleşme ile geliştiriliyor. Henüz bir anticheat yazılmadı. Önbellekleme ihtiyacı olursa redis tercih etmeyi düşünüyorum.
Client:
Unity C#
Database:
SQL
Performans noktalarındaki araştırmaları yapmak isterseniz siz de bahsettiğim içerikleri araştırabilirsiniz. Server paketlerinin %70-80 civarını taşıdım yazdığım servera.
Şu an client için elimde UI ve Karakter animasyon paketleri olmadığından daha çok server ağırlıklı çalışıyorum. Yakın zamanda bir kaç görsel de paylaşacağım orjinal assetlerin kullanılmadığı. Merak ettikleriniz sormak istedikleriniz varsa çekinmeden sorabilirsiniz.
Tam olarak ne demek istediğinizi anlayamadım hocam. Soket haberleşme login register veya herhangi bir paket fark etmeksizin hep aynı mantık ile çalışıyor. Gelen giden paketlerin taşıdı veri değişiyor sadece.C# soket haberleşmesine yardımcı olabilirsen gerisini ben de yapabiliyorum login sonrası pek haberleştiremedim server list gördüm karakter seçtiripoyuna sokamadımç
süper eline sağlık bu arada aklıma gelmişken movement datasını udp ile gönderebilirsin knight tcp ile göndermiş ama mobilede tcp ile cok fazla data gonderdıkce ısınma sorunları ile karşılaşmıştık ozellıkle eski cihazlar felaket ısınıyor udp le move datası arada kayıp olsada cok onemli değil birde unity tarafında cıktı aldıgında il2cpp ile c++ a complie edilo kodlar ama piyasada baya gelişmişmiş func isimleri vb direk tersine muhendislik ile elde edi,yorlar kabak gibi her şey ortada o yüzden mutlaka unity tarafında obfuscation yaptırmaya bak ara arada goruntu at ilerlemeni görelim test cıktısı alırsan bizde girelim![]()
Postgresql evet hizli buyuk boyutlarda ve coklu yazma da ust seviyede performans ama peki verileri isleme kisminda edit kisminda yonetim kisminda alisilmisin cok disina cikacaksiniz. Send recv db haberlesmeyi cok iyi planlamaniz lazim. Server sql e gore basladiginizi dusunuyorum yazinizdan onu anladim. Yanlis dusunmus anlamissam kusura bakma. postgresql icin yeniden elden gecirmeniz gerekecek. Yapiyi ko dan ayri planlama yapacaksaniz dahada karmasiklasacak. Db kullandigim 10 farkli yazilimim var nbdb postgresql sqlite3 kullandiklarim var sifirdan plana sagdik kalip edit gerektirmeyen durumlar icin guzeller. Ama ko gibi takipli manuel islemler icin zorluk seviyesi bana gore degil ve ben dusunmezdim. bu benim fikrim. Postgresql e de sifirdan editor + tam uyumlu kontrol yonetim uygulamasi sart ayrica kurulumunuda inceleyin. bagimsiz db olusturmak baska sunucuya atip calistirmak adina biraz alisilmisin disinda. İyi inceleyip oyle karar verin.
Evet değmedi. Ama bir şeye yeniden başlamak ilk defa başlamaktan farklı oluyor. Eski olumsuz tecrübeler elekte kalıyorBenim kendi yazdigim mobil oyunda postgresql kullandim bin pisman oldum . Projeyi yeniden yapilandirmak sacma seylere sebep oldu yeniden basladim sqlite3 olarak. Ve yonetim paneli kontrol yazma silme tablo shema stun satir herseyi web arayuyu yada uygulama olmak zorunda sql gibi alisilmisin disinda inanilmaz zor. Bana gore tabi. Heleki ko ile ilgiliyse alistigin gibi olmayinca cozmek de zor olacak. Maceraya degmez.