Şimdi Ara

Online oyunlardaki senkronizasyon sistemi nasil calisiyor ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
24
Cevap
1
Favori
1.672
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Kendi oyunumu yaparken kafam bu konuya takildi. Birkac teori urettim fakat yine isin icinden cikamadim. Mesela metin2 oyunundan bahsedelim, ben metin2 oyununa girip sunucuya baglandigimda (oyuna girdigimde) birsuru diger oyuncularin karakterlerini ve o karakterlerin yaptigi hareketleri es zamanli olarak gorebiliyorum. Peki benim oyunum (Client) nasil tum karakterlerin ve server da olan herseyin bilgisini bilgisayara yukledi ? Diyelimki yuklesin bir sekilde tamam ona lafim yok ama yine bir sorun var... Yukleme sirasinda da bir cok sey degisiyor serverda, yani kisacasi yukledigi bilgiler guncel degil eski bilgiler olacak, bi nevi oyunun gecmisini yuklemis olacak. Oyun (Client) nasil guncel bilgiyi bilgisayara yukluyor ve bilgiyi surekli guncelliyor yani senkronizasyonu nasil sagliyor ?

    Bunu sadece metin2 degil League of Legends da yapiyor. Mesele oyun sirasinda baglantim koptugunda ve oyuna birkac dakika sonra girdigimde oyunun simdiki zamandaki halini gorebiliyorum.


    Teorilerim:
    1 - Server'a baglandigin zaman client server'i serialize (Object serialization mesela Java da var) ediyor. Yani serverdaki tum nesneleri serialize edip pc ye yukluyor ve serverden aldigi verilere gore oyunu guncelliyor. Bu teorinin kotu yani su: Serialize sirasinda serverin durdurulmasi lazim yoksa serverdaki objeler surekli degistigi icin senkronizasyon bozulabilir. Her kullanici server'a baglandiginda server durursa buda oyunun surekli durup calismasi anlamina geliyorki bu da oyunu oynanamaz yapiyor.

    2 - Server oyunun basladigi andan itibaren tum inputlari kaydediyor ve client server'a baglandigi zaman oyunun baslangic halini yukluyor ve serverdaki tum inputlari alip oyuna girdi olarak veriyor, tabi bu islemi zamani hizlandirarak yapiyor ve oyunda suanki haline geliyor, yani senkronizasyonu bu sekilde saglamis oluyor. Bu teorinin kotu yani ise oyunun baslangic zamaninin cok eski olmasi yani baslangic zamani suanki zamanin 30 yada 40 dakika oncesi degilse mesela 1, 2 veya 3 yil oncesi ise bu sure icerisinde client devasa bir input verisini oyuna yuklemesi ve birde bunlari isleme sokmasi gerekyor.

    Goruldugu 2 teoriminde kotu yani var. Yani hicbirisi benim icin tatmin edici degil. Peki gercekte olan ney bu durumda ?







  • clientta hiç bir işlem olmuyor her işlem sunucuda

    < Bu ileti DH mobil uygulamasından atıldı >
  • Karmaşık oyunlarda binary paket gidiyor olabilir, yinede json her şekilde işi götürür.

    Yani sunucu dediğin halt, IRC serverin hallicesi, eskiden bağlanlar text alıp veriyordu, şimdi 3d vektör bilgisi alıp veriyorsunuz. yani oraya gönderdiğiniz veriye göre size geri bildirim yapıyor,

    tüm kullanıcılar o anda bir şey yapıyor, sunucu ona göre bir durum üretiyor, ahmet orada mehmet burada, osman ateş etti ateş yarıyolda vs. bu sürekli sizin bilgisayarlarınıza geliyor, sizin bilgisayarda televizyon gibi bunu gösteriyor.

    Yani aslında sen, sunucudaki 3d bilgisine göre oyunu oynuyorsun, sunucuda sen göresin diye senin istemciye güncelleme gönderiyor.
  • Unity'de mesela Photon Networking'te bu durumu stream ederek çözülüyorlar hareketleri falan. Google Play Services'ın Multiplayer Network'ünde ise mesela tüm hareketler byte'a çevrilip o şekilde yollanıyordu.

    Yani bu tarz sunucuda yapılan hesaplamalar Client tarafından sadece sana gösterilir. Client hesap yapmaz.

    Not: Client'tan kasıt da oyuncunun kendisi, makinesi diyelim daha anlaşılır olması için kısaca. Çünkü sanırım Client kavramını da yanlış kullanmışsın gibi geldi mesajında.



    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 17 Haziran 2020; 0:46:31 >
  • Sunucuya bağlanıyorsun. Sunucuda bir bilgi değişti ise client ona abone oluyor ve değişikliği hemen alıyor ve onu dinliyen kod ne yapması gerekiyorsa onu uyguluyor. kendisi de bir değişiklik yaptı ise bunu iletiyor. Tıpk bir otobüs gibi. bir ön kapı var bir de arka kapı. Birileri binerken birileri iniyor. O kadar hızlı oluyor ki bize realtime gibi geliyor.


    Merak ettiğiniz şey ölçekleme ise halo 4 de Ms Orleans isimli aracı kullanıyorlar. https://dotnet.github.io/orleans/Community/Who-Is-Using-Orleans.html


    Soruyu daha spesifik soraranız cevaplamaya calısırım.
  • Tum islemlerin sunucuda oldugu kismini anladim. Fakat client sunucuyu nasil 1 e 1 yansitiyor? Client birsey yapmiyormus gibi gozukuyor ama Client'in sadece sunucudaki bilgiyi yansitma islemi bile benim ici kafa katistirici. Sunucuda yansitilmasi gereken objelerin komplexligi ve state'ini dusununce client gercekten cok onemli ve karmasik bir is yapiyor ama bu isi nasil yaptigini bilmiyorum ve bu yuzden size soruyorum.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: psikolojikSorunlu.insan

    Tum islemlerin sunucuda oldugu kismini anladim. Fakat client sunucuyu nasil 1 e 1 yansitiyor? Client birsey yapmiyormus gibi gozukuyor ama Client'in sadece sunucudaki bilgiyi yansitma islemi bile benim ici kafa katistirici. Sunucuda yansitilmasi gereken objelerin komplexligi ve state'ini dusununce client gercekten cok onemli ve karmasik bir is yapiyor ama bu isi nasil yaptigini bilmiyorum ve bu yuzden size soruyorum.
    Onu da işte donanımla yapıyor. Ekran kartıyla, işlemci ile ve diğer donanımlarla yapıyor. Anlık görüntü yani "kare" (frame) dediğimiz bir olay var işte. Sizin oyunlardaki FPS olarak gördüğünüz değer de saniyelik kare sayısıdır. İşte bu sorduğun yansıtma olayı işlemci ve ekran kartının görüntüyü işleyip sana, monitörüne yansıtmasıyla oluyor. Arada o kadar küçük gecikmeler olduğu için bu size anlık görüntü olarak gözüküyor. Misal 60 fps'de Nvidia ekran kartlarında ortalama 15-20 ms gecikme süresi vardır. Buna monitör, internet vb gecikmeleri de ekleyebiliriz.




  • quote:

    Orijinalden alıntı: Restrop

    clientta hiç bir işlem olmuyor her işlem sunucuda
    Bütün işlemler kullanıcı tarafında olur. Sizin dediğiniz gibi sunucu tarafında olsaydı hiç kimse hile yapamazdı.
    Sunucu tarafına sadece bu işlemlerin sonucu iletilir. Standart bir mmo sunucusunun anlık kapasitesi binlerce oyuncudur. Bu binlerce oyuncunun her hareketini her saniye hesaplayıp bunu tekrar oyunculara makul bir sürede iletecek bir sunucu teknolojisi yok.

    Konuyu açan kişi socket.io ile yapılan multiplayer oyunları araştırırsa senkronizasyon işinin nasıl olduğunu az buçuk anlar.
  • yaman01 Y kullanıcısına yanıt
    ben zaten expert değilim bu konuda bilgem çakır röportajda söylüyordu cümleyi aynen aktardım zaten hile olmaması için yapılan bir şey bu belki de ikv küçük bir proje olduğu için bu mümkündür fakat lol konusunda bu bana mantıklı geldi çünkü kimse hile yapamıyor zaten

    < Bu ileti DH mobil uygulamasından atıldı >
  • İlk düşüncen doğru. Oyun sırasında sunucu gereken bilgileri istemciye yükler. Her değişim olduğunda ve genellikle sabit bir FPS ile istemciyi günceller.

    Genellikle bir MMORPG oyun için 20-25 arası FPS yeterlidir. Yani sunucu her 40 milisaniyeye bir istemciyi günceller. İstemci her zaman belli bir milisaniye geriden gidecektir, bu işin doğasında var. Anlık bilgi gönderebilecek bir teknoloji yok.

    40 Milisaniye gibi bir süre zaten fazla değil, oyuncunun bu süre içerisinde yaptığı eylemler gözle görülür aşırı bir fark yaratmaz.
  • quote:

    Orijinalden alıntı: NaudiR

    İlk düşüncen doğru. Oyun sırasında sunucu gereken bilgileri istemciye yükler. Her değişim olduğunda ve genellikle sabit bir FPS ile istemciyi günceller.

    Genellikle bir MMORPG oyun için 20-25 arası FPS yeterlidir. Yani sunucu her 40 milisaniyeye bir istemciyi günceller. İstemci her zaman belli bir milisaniye geriden gidecektir, bu işin doğasında var. Anlık bilgi gönderebilecek bir teknoloji yok.

    40 Milisaniye gibi bir süre zaten fazla değil, oyuncunun bu süre içerisinde yaptığı eylemler gözle görülür aşırı bir fark yaratmaz.
    Söylediklerinizin hiç birisi doğru değil. Fps ekran kartının saniyede oluşturduğu/oluşturabileceği görüntü sayısıdır ve sunucu ile uzaktan yakından hiç bir alakası yok. Online oyunlardaki gecikmenin nedeni sunucu lokasyonu ile oyuncu lokasyonu arasındaki mesefadir. 20-25 fps de çizgi roman okumak için idealdir oyun oynamak için değil. Sunucunun istemciyi güncellemesi diye bir olay da yok. Sunucu verileri gönderir, oyun motoru da bu verilere göre oyunu çizer. 40ms sabit bir değer de değildir. Avrupa'daki online oyun sunucularının çoğu Frankfurt'ta olduğu için Türkiye-Frankfurt arası minimum gecikme 40ms dir. Gidip Almanya'da oynarsanız gecikmenin 10-15 ms lere kadar düştüğünü görürsünüz.




  • quote:

    Orijinalden alıntı: yaman01

    Söylediklerinizin hiç birisi doğru değil. Fps ekran kartının saniyede oluşturduğu/oluşturabileceği görüntü sayısıdır ve sunucu ile uzaktan yakından hiç bir alakası yok. Online oyunlardaki gecikmenin nedeni sunucu lokasyonu ile oyuncu lokasyonu arasındaki mesefadir. 20-25 fps de çizgi roman okumak için idealdir oyun oynamak için değil. Sunucunun istemciyi güncellemesi diye bir olay da yok. Sunucu verileri gönderir, oyun motoru da bu verilere göre oyunu çizer. 40ms sabit bir değer de değildir. Avrupa'daki online oyun sunucularının çoğu Frankfurt'ta olduğu için Türkiye-Frankfurt arası minimum gecikme 40ms dir. Gidip Almanya'da oynarsanız gecikmenin 10-15 ms lere kadar düştüğünü görürsünüz.

    Alıntıları Göster
    Hayır, katılmıyorum. Kullandığınız tüm donanımların yaptığı gecikmenin online oyunlardaki oynayışınıza etkisi vardır. Mouse, monitör tepkime süreleri, ekran kartının görüntüyü yansıtma süresi, internetinizin pingi (bahsettiğiniz şey) vb.. tüm bunlar toplamda sunucu ile olan gecikmenizi etkiler. Profesyonel E-Spor oyuncuları boşuna binlerce liralık, dolarlık klavye, mouse, monitör (144 hz - 1 ms vb) almıyor. Hatta bu yüzden CS:GO gibi oyunlarda maksimum FPS alıp frame time'ı düşürmek için grafik ayarları olabildiğince düşük tutulur, görsel kaliteden ziyade oyuncu performansı (refleks, tepkime hızı) artsın diye.



    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 18 Haziran 2020; 3:58:11 >




  • Neye katılıp katılmadığınızı anlamadım. Bir şeyler iddia etmiyorum, sadece bir üst mesajdaki yanlışları söyledim. Profesyonel oyuncuların monitör haricindeki harcamaları tamamen lüks. Hatta 144 fps görmek için oyunun grafik ayarlarını kısmaları tamamen gösteriş. Görüntü yağ gibi akıp gider ona bir şey demem fakat 144 fps ile akan bir oyunda saniyenin 140 ta biri kadar bir süredeki değişikliği fark edip buna göre hareket eden bir insan evladı yok. Görüntünün gözlerinizden beyninize, orada yorumlanıp sinir sisteminizle parmaklarınıza iletilmesi bile belirli bir süre alıyorken "144 fps de daha hızlı oynuyorum" demek kuyruklu yalandan başka bir şey değil.



    < Bu mesaj bu kişi tarafından değiştirildi yaman01 -- 18 Haziran 2020; 4:26:4 >
  • quote:

    Orijinalden alıntı: yaman01

    Neye katılıp katılmadığınızı anlamadım. Bir şeyler iddia etmiyorum, sadece bir üst mesajdaki yanlışları söyledim. Profesyonel oyuncuların monitör haricindeki harcamaları tamamen lüks. Hatta 144 fps görmek için oyunun grafik ayarlarını kısmaları tamamen gösteriş. Görüntü yağ gibi akıp gider ona bir şey demem fakat 144 fps ile akan bir oyunda saniyenin 140 ta biri kadar bir süredeki değişikliği fark edip buna göre hareket eden bir insan evladı yok. Görüntünün gözlerinizden beyninize, orada yorumlanıp sinir sisteminizle parmaklarınıza iletilmesi bile belirli bir süre alıyorken "144 fps de daha hızlı oynuyorum" demek kuyruklu yalandan başka bir şey değil.
    CS:GO'da örneğin 60 fps'de frametime'ı 20 ms olan kişi 300-400 FPS'de 2-4 ms civarı frametime'a sahip olur. Mesela 80 pingi olan biri için gayet de etkili bir değişim bu. 80+20 = 100 ms ile 80+2 = 82 ms arasındaki fark rahat hissedilebilir, Siz inanmıyor olabilirsiniz, dünyada çok sayıda e-sporcu var. İnsanlar düşük gecikme için boşuna uğraşmıyor. Tamam 1 ms ile 10 ms veya 10 ms ile 20 ms arasındaki farkı hissetmek belki inanılmaz zor ama 10 ms ile 60 ms arası mesela net hissedilebilir bir profesyonel oyuncu tarafından. Frametime ile de verdiğim örnekteki gibi 18-16 ms birden düşüş de bu değerlerde önemlidir.



    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 18 Haziran 2020; 4:41:20 >




  • Birimi ms olan her ölçüyü bir biri ile toplayamazsınız. Resmen elma ile armudu toplamışsınız orada. Neyse uzun uzun yazardım fakat uykum geldi yarın yazarım artık.
  • quote:

    Orijinalden alıntı: yaman01

    Söylediklerinizin hiç birisi doğru değil. Fps ekran kartının saniyede oluşturduğu/oluşturabileceği görüntü sayısıdır ve sunucu ile uzaktan yakından hiç bir alakası yok. Online oyunlardaki gecikmenin nedeni sunucu lokasyonu ile oyuncu lokasyonu arasındaki mesefadir. 20-25 fps de çizgi roman okumak için idealdir oyun oynamak için değil. Sunucunun istemciyi güncellemesi diye bir olay da yok. Sunucu verileri gönderir, oyun motoru da bu verilere göre oyunu çizer. 40ms sabit bir değer de değildir. Avrupa'daki online oyun sunucularının çoğu Frankfurt'ta olduğu için Türkiye-Frankfurt arası minimum gecikme 40ms dir. Gidip Almanya'da oynarsanız gecikmenin 10-15 ms lere kadar düştüğünü görürsünüz.

    Alıntıları Göster
    Bu alanda bir uzmanlığınız var mı bu şekilde konuşuyorsunuz? Uzmanlığınız varsa da bir çok şeyi yanlış öğrenmişsiniz. Bizzat sunucu işleriyle uğraşıp oyun sunucusu yazıyorum, inceliyorum. FPS dediğiniz şey sunucuda da vardır, bazen buna Tick de denebilir. FPSyi yalnızca ekran kartının saniyede kare oluşturma gücü değil, oyun motorunun girilen inputları işlemesi, oyun motorundaki fizik işlemleri de etkiler ki bunlar zaten ekran kartıyla alakalı şeyler değil.

    20-25 FPS bir MMORPG sunucusu için yeterlidir, buna yetersiz demeniz bile ne kadar bilgisiz olduğunuzu gösteriyor. Siz bilgisayarınızda bir MMORPGyi 144 fps ile oynuyorsanız bunun nedeni sunucunun 144 FPS olması değildir. İstemci 20-25 FPS ile gelen verileri interpolasyon yaparak 144 FPSde akıcı bir şekilde gösterir. Metin2 oyununu biliyorsanız sunucusunu inceleyebilirsiniz, sunucusu 25 FPSde çalışıyor.

    Sunucu istemciyi günceller, buradaki kastım zaten sunucunun veriyi göndermesi istemcinin ise bunu alması ve kullanması, siz ne olarak anladınız anlamadım?

    Yalnızca pingden kaynaklı değil aynı zamanda FPS hızından kaynaklı gecikme de vardır. Oyun sunucuları isterse bu FPSyi yükselterek gecikmeyi azaltabilir; ancak bu kez de işlemci süresi artacak sunucu daha fazla güç harcayacak doğal olarak işleyebileceği istemci sayısı düşecektir.

    *Ayrıca not olsun: Sürekli sabit bir FPSde güncellenen hareket konumları için gecikmenin bir önemi yoktur; çünkü konum sürekli güncellendiği için ilk 40ms gecikme yaşayacak daha sonra ise bilgi ardışık geldiği için sıkıntı olmayacaktır.



    < Bu mesaj bu kişi tarafından değiştirildi NaudiR -- 18 Haziran 2020; 15:5:55 >




  • quote:

    Orijinalden alıntı: NaudiR

    Bu alanda bir uzmanlığınız var mı bu şekilde konuşuyorsunuz? Uzmanlığınız varsa da bir çok şeyi yanlış öğrenmişsiniz. Bizzat sunucu işleriyle uğraşıp oyun sunucusu yazıyorum, inceliyorum. FPS dediğiniz şey sunucuda da vardır, bazen buna Tick de denebilir. FPSyi yalnızca ekran kartının saniyede kare oluşturma gücü değil, oyun motorunun girilen inputları işlemesi, oyun motorundaki fizik işlemleri de etkiler ki bunlar zaten ekran kartıyla alakalı şeyler değil.

    20-25 FPS bir MMORPG sunucusu için yeterlidir, buna yetersiz demeniz bile ne kadar bilgisiz olduğunuzu gösteriyor. Siz bilgisayarınızda bir MMORPGyi 144 fps ile oynuyorsanız bunun nedeni sunucunun 144 FPS olması değildir. İstemci 20-25 FPS ile gelen verileri interpolasyon yaparak 144 FPSde akıcı bir şekilde gösterir. Metin2 oyununu biliyorsanız sunucusunu inceleyebilirsiniz, sunucusu 25 FPSde çalışıyor.

    Sunucu istemciyi günceller, buradaki kastım zaten sunucunun veriyi göndermesi istemcinin ise bunu alması ve kullanması, siz ne olarak anladınız anlamadım?

    Yalnızca pingden kaynaklı değil aynı zamanda FPS hızından kaynaklı gecikme de vardır. Oyun sunucuları isterse bu FPSyi yükselterek gecikmeyi azaltabilir; ancak bu kez de işlemci süresi artacak sunucu daha fazla güç harcayacak doğal olarak işleyebileceği istemci sayısı düşecektir.

    *Ayrıca not olsun: Sürekli sabit bir FPSde güncellenen hareket konumları için gecikmenin bir önemi yoktur; çünkü konum sürekli güncellendiği için ilk 40ms gecikme yaşayacak daha sonra ise bilgi ardışık geldiği için sıkıntı olmayacaktır.

    Alıntıları Göster
    Neden söz ettiğinizi hiç anlamadım 2-3 defa okuduğum halde. Siz bilgisayarınızda bir MMORPGyi 144 fps ile oynuyorsanız bunun nedeni sunucunun 144 FPS olması değildir. İstemci 20-25 FPS ile gelen verileri interpolasyon yaparak 144 FPSde akıcı bir şekilde gösterir. hele bu kısmı hiç anlamadım.



    < Bu mesaj bu kişi tarafından değiştirildi yaman01 -- 18 Haziran 2020; 15:42:47 >




  • Konu çok farklı yerlere sapmış. Ben de bu soeunun cevabını merak ediyordum. Şu sayfada baya bir bilgi yazıyor.

    https://www.gabrielgambetta.com/client-server-game-architecture.html

    İnternette netcode diye aratırsanız daha bir sürü açıklama bulabilirsiniz

    < Bu ileti mini sürüm kullanılarak atıldı >
  • SpesifikBrush S kullanıcısına yanıt
    Tesekkurler.
  • quote:

    Orijinalden alıntı: yaman01

    Neden söz ettiğinizi hiç anlamadım 2-3 defa okuduğum halde. Siz bilgisayarınızda bir MMORPGyi 144 fps ile oynuyorsanız bunun nedeni sunucunun 144 FPS olması değildir. İstemci 20-25 FPS ile gelen verileri interpolasyon yaparak 144 FPSde akıcı bir şekilde gösterir. hele bu kısmı hiç anlamadım.

    Alıntıları Göster
    Bence arkadaşın kendiside neden bahsettiğini anlamıyor :D
    FPS ile sunucunun ne alakası var kardeş. Sen sunucu ile uğraştığına eminmisin :D
    Eğer gerçekten bu işe meraklı birileri varsa buradaki yarım yamalak uzmanlaşmış arkadaşların fikirlerini kesinlikle dikkate almasın aşağıdaki kaynakları ve makaleleri incelesin.

    Socket İO Online Gaming
    Socket İO_2
    AngulaNode Js Socket İO
    c# Soket Programlama
    Sunucu Taraflı Soket İo Asal Sayı Bulma

    Araştırın arkadaşlar google gibi büyük bir kütüphane elinizin altında iken araştırın. En son çare gelip birilerinden yardım istemek olsun. Bu ülkede hiç kimseden bilgi, yardım almayın bazıları sizi bile isteye yanıltıyor, aklınızı karıştırıyor ve öğrenmenizi engelliyor. Zibilyon tane kaynak var google 'da. Ama ülkemizde okullarda araştırma diye bir şey öğretilmediği için böyle oluyor.
    Benden size tavsiye olsun bir konu hakkında bilgi sahibi olmak istiyorsanız o konunun içinde bulunun. Sen kardeşim online oyun nasıl işliyor merakmı ediyorsun o zaman youtube aç "step by step online game programing" diye arat, izle. Bu iş böyle öğrenilir kardeşim. Sonra gel burda bazı kişilerin yazmış olduklarını oku ve gül geç.




  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.