• 05-02-2021, 13:37:37
    #1
    Arakadaslar websocket kullnarak bir oyun sunucusu yapıyorum unity ile. Ben oyun sunucusu yaparken bir loby kuracağim ama simdi bu loby işi tam nasıl çalışıyor. Vrileri mysql'de tutup sorgu yapmam verimli olur mu ?
  • Kabul Edilen Cevap
    • 1 Beğeni
      insolitax adlı üyeden alıntı: mesajı görüntüle
      Hocam tam anlayamadım. Simdi clinet tarafından bana kurulan lobinin id si ve icerideki kisilerin userid si geliyor userid sayısı sürekli değisebilmekte. Birde oyun icine gelince bir kisi haraket edince haraket kordinatlarını servera yollayıp ordan okuyorum sürekli olarak. Cache tam olarak ne işe yarayacak
      Açılan her lobiyi bellekte(RAM) tutabilirsiniz ve bellekte olan lobi id ile user idlerini sürekli olarak tüm oyunculara ileteceğiniz için performans kaybı yaşamazsınız. Tek sorun sunucu her kapanıp açıldığında sıfırlanması olur. Koordinat kısımları önemli ise giriş çıkış,çökme gibi durumlarda koordinatları ve diğer almanız gereken parametreleri veritabanına yazdırırsınız.

      Lobiler sabit bir veritabanı içinde ise sunucuyu başlattığınızda içindeki veriyi yine belleğe yazdırıp bellek üzerinden okuma yapılması yine performans elde edersiniz.

      veri tabanını nerede ağırlıklı kullanırsınız. Sabit verilerde(Eşya,yaratık vb.), Karakterde ise yetenek,para birimi gibi yerde veri tabanında saklanması gerekenleri belirleyip saklamanız gerekiyor.
      Hepsinden önce değer,referans bellek yönetimi konularına hakim olmak gerekiyor.
  • 05-02-2021, 13:39:13
    #2
    Bence sürekli sorgu yapmanız bir yavaşlığa neden olacaktır. Bilgileri önbellek (cache) yöntemi ile bir süreliğine tutup ardından veritabanına yazdırmanız daha iyi ve hızlı olacaktır diye düşünüyorum.
  • 05-02-2021, 13:44:55
    #3
    VodkaKarpuz adlı üyeden alıntı: mesajı görüntüle
    Bence sürekli sorgu yapmanız bir yavaşlığa neden olacaktır. Bilgileri önbellek (cache) yöntemi ile bir süreliğine tutup ardından veritabanına yazdırmanız daha iyi ve hızlı olacaktır diye düşünüyorum.
    Hocam tam anlayamadım. Simdi clinet tarafından bana kurulan lobinin id si ve icerideki kisilerin userid si geliyor userid sayısı sürekli değisebilmekte. Birde oyun icine gelince bir kisi haraket edince haraket kordinatlarını servera yollayıp ordan okuyorum sürekli olarak. Cache tam olarak ne işe yarayacak
  • 05-02-2021, 15:46:28
    #4
    Bu cevap, konu sahibi tarafından kabul edilebilir bir cevap olarak işaretlendi.
    insolitax adlı üyeden alıntı: mesajı görüntüle
    Hocam tam anlayamadım. Simdi clinet tarafından bana kurulan lobinin id si ve icerideki kisilerin userid si geliyor userid sayısı sürekli değisebilmekte. Birde oyun icine gelince bir kisi haraket edince haraket kordinatlarını servera yollayıp ordan okuyorum sürekli olarak. Cache tam olarak ne işe yarayacak
    Açılan her lobiyi bellekte(RAM) tutabilirsiniz ve bellekte olan lobi id ile user idlerini sürekli olarak tüm oyunculara ileteceğiniz için performans kaybı yaşamazsınız. Tek sorun sunucu her kapanıp açıldığında sıfırlanması olur. Koordinat kısımları önemli ise giriş çıkış,çökme gibi durumlarda koordinatları ve diğer almanız gereken parametreleri veritabanına yazdırırsınız.

    Lobiler sabit bir veritabanı içinde ise sunucuyu başlattığınızda içindeki veriyi yine belleğe yazdırıp bellek üzerinden okuma yapılması yine performans elde edersiniz.

    veri tabanını nerede ağırlıklı kullanırsınız. Sabit verilerde(Eşya,yaratık vb.), Karakterde ise yetenek,para birimi gibi yerde veri tabanında saklanması gerekenleri belirleyip saklamanız gerekiyor.
    Hepsinden önce değer,referans bellek yönetimi konularına hakim olmak gerekiyor.
  • 05-02-2021, 15:50:50
    #5
    TUROTTO adlı üyeden alıntı: mesajı görüntüle
    Açılan her lobiyi bellekte(RAM) tutabilirsiniz ve bellekte olan lobi id ile user idlerini sürekli olarak tüm oyunculara ileteceğiniz için performans kaybı yaşamazsınız. Tek sorun sunucu her kapanıp açıldığında sıfırlanması olur. Koordinat kısımları önemli ise giriş çıkış,çökme gibi durumlarda koordinatları ve diğer almanız gereken parametreleri veritabanına yazdırırsınız.

    Lobiler sabit bir veritabanı içinde ise sunucuyu başlattığınızda içindeki veriyi yine belleğe yazdırıp bellek üzerinden okuma yapılması yine performans elde edersiniz.

    veri tabanını nerede ağırlıklı kullanırsınız. Sabit verilerde(Eşya,yaratık vb.), Karakterde ise yetenek,para birimi gibi yerde veri tabanında saklanması gerekenleri belirleyip saklamanız gerekiyor.
    Hepsinden önce değer,referans bellek yönetimi konularına hakim olmak gerekiyor.
    Bahsettiğiniz bellekte yer tutma stack ve heap bellek alanlarından bahsetmiyormusunuz. Zatrn atafiğimız değiskenler bellekte heap veya stack bellek alanında tutuluyor türüne göre . Benim farklı olarak ne yapmam lazım.
    Demek istediğiniz idleri sürekli bir degiskenr atamam mı?
  • 05-02-2021, 15:59:35
    #6
    insolitax adlı üyeden alıntı: mesajı görüntüle
    Bahsettiğiniz bellekte yer tutma stack ve heap bellek alanlarından bahsetmiyormusunuz. Zatrn atafiğimız değiskenler bellekte heap veya stack bellek alanında tutuluyor türüne göre . Benim farklı olarak ne yapmam lazım.
    Demek istediğiniz idleri sürekli bir degiskenr atamam mı?
    x bir oyuncu giriş yaptığında accountid/characterid gibi veriyi Data Structures / Dictionary yardımı ile giriş yaptığı tcp portu ile birlikte belleğe aldınız diyelim. Giriş yapan karakterin id'sini var olan yada oluşan lobiye çekip oyucunun orada olduğunu bilirsiniz. Sürekli değişiklik yapmanıza gerek kalmaz. Karakter lobiden çıkınca sil / girince ekle ve bunları tüm oyunculara ilet yazmanız yeterli. Başka bir şey yapmanıza gerek yok.

    C# - Dictionary Sınıfı | Serdar Yılmaz (srdrylmz.com)
  • 05-02-2021, 16:01:28
    #7
    TUROTTO adlı üyeden alıntı: mesajı görüntüle
    x bir oyuncu giriş yaptığında accountid/characterid gibi veriyi Data Structures / Dictionary yardımı ile giriş yaptığı tcp portu ile birlikte belleğe aldınız diyelim. Giriş yapan karakterin id'sini var olan yada oluşan lobiye çekip oyucunun orada olduğunu bilirsiniz. Sürekli değişiklik yapmanıza gerek kalmaz. Karakter lobiden çıkınca sil / girince ekle ve bunları tüm oyunculara ilet yazmanız yeterli. Başka bir şey yapmanıza gerek yok.

    C# - Dictionary Sınıfı | Serdar Yılmaz (srdrylmz.com)
    Çok teşekkürler mükemmelsiniz.