Selamun Aleyküm,
Bu konumuzda inşAllah Multiplayer oyunlarındaki Sunucu client ilişkisini anlatmaya çalışacağım. Hızla gelişen teknolojide sadece yazılımlar ve donanım parçaları da yenilik göstermemektedir. Bu yeniliklerin içerisinde de oyunlarda mevcuttur. Günümüz teknolojisinde artık Online oyun popüler bir şekilde yerini almıştır. İnsanoğlu makinaya karşı değil de karşısında da bir insanın olduğu oyunları oynamakta tercih ediyor. Bu sebepten ötürü oyun üreticileri oyunlarını artık Multiplayer özelliğini daha aktif ve ön planda tutmaya çalışıyorlar.
İstemci-Sunucu Nasıl İşler?
İlk önce istemci-sunucu hakkında ufak bir bilgi verelim daha sonra aralarındaki ilişkiyi anlatayım.
İstemci, daha çok grafik arayüzlü olup yaşamını bir veya birden fazla kaynağa bağlayarak kullanıcıya hizmet vermek amaçlıdır. Sunucu, ana makinalardan yâda veritabanı gibi hizmetlerin bulunduğu istemcilerin kaynak için bağlandığı serverlardır.
İstemci-Sunucu, ölçeklenebilir bir mimari hizmeti sunmaya çalışır bu sayede istemci sunucu arasında sürekli bir tcp alış verişi vardır. Ağ üzerinde yâda bağlantılar üzerinde ki bu ağlarda lan wan olabilir yani sadece local ağımız olarak kısıtlamak yanlış olur, istemci yâda sunucu bu ağlar üzerinde ki rollerini üstlenir ve sunucu hizmet vermeye istemci ise hizmet almaya başlar. Sunucu için her zaman güçlü dayanıklı ve 7/24 çalışmaya dayanıklı bilgisayarlar tercih edilir ve bu bilgisayarlarda genellikle Server olarak geçmektedir. İstemci için ise o kadar güçlü bilgisayarlara gerek yoktur. Bir thinclient bir işlemi tamamlaya bilmektedir. İstemciler gerek duydukları verinin pek çoğunu ya da tamamını uygulama sunucusundan isterler. Mesela; ayar dosyaları, stok verileri, iş uygulama yazılımları vs. gibi.
Bu ilişkinin pek çok çeşitli uygulaması olmasına rağmen, verebilecek en güzel örnek, İnternet üzerinde ki sayfaları verebiliriz. Bir web sayfasını açtığımızda, bilgisayar veya browserımız istemci olarak görülür. Web sayfasını oluşturan bilgisayar veya veritabanı da sunucu olarak görünmektedir. Web tarayıcısı, web sitesinden bir istekte bulunur ve sunucu istenen bilgileri toplar ve onu bir web sitesi şekline getirerek web tarayıcısına geri yollar, kullanıcılar da ekranda web sitesini görmüş olur. Bu sayede sunucu-istemci ilişkisi kurulmuş olmaktadır.
Sunucunun özellikleri:
- Pasif
- İstekleri bekler
- İstek olduğunda bilgiyi sunar ve cevap yollar
İstemcinin özellikleri:
- Aktif
- İstekleri gönderir
- Cevap dönene kadar bekler
Sunucular genellikle durumsuz (stateless) veya durumlu (stateful) olurlar. Durumsuz olduklarında ise bilgi tutmazlar. Durumlu bir sunucu kendine gelen istekler arasında bilgi tutar ve bu bilgi küresel veya oturum bazlı olmaktadır. Durumlu bir sunucuya örnek verecek olursak Apache Tomcat sunucusunu verebiliriz. İstemci ve sunucu arasında ki ilişki genelde ardışık diyagramlar ile belirlenir ve bu diyagramlar UML standardına uygun yapılır.
Bir diğer istemci sunucu mimarisi ise peer-to-peer yapılardır. Bu yapıda her bir düğüm, hem istemci hem de sunucudur. Hepsi de anı sorumluluğa sahiptirler. Hem istemci sunucu mimarisi hemde peer to peer mimarisi günümüzde kullanımı az olan bir yapıdır.
Günümüzde kullanılan istemci sunucu mimarisinde iki adet düğüm vardır. Bu iki adet düğümün olması sebebiyle iki katmanlı mimari olarak adlandırılır. Bazı ağlarda üç düğümlü bir yapı olabilir. Örnek olarak istemci, uygulama sunucusu ve veritabanı sunucusu olmak üzere üç adet düğüm vardır. Bu yapılara üç katmanlı mimari olarak adlandırılmaktadır.
Genelde mimarilerde n-katmanlı ya da çok-katmanlı mimarilerde iş mantığının farklı fonksiyonları için her bir hizmetle sorumlu ayrı bir sunucu görevlendirilir. Çok-katmanlı mimarinin iki-katmanlı mimariye göre avantajı daha iyi yük dengeleme sunması ve daha çok ölçeklenebilir olmasıdır. Dezavantajları ise ağa daha fazla yük getirmesi ve programlama ve test aşamalarının daha zor gerçekleştirilmesidir.
İstemci sunucu mimarilerde adresleme çeşitli yöntemler ile gerçekleştirilir:
- Makine proses adreslemesi (machine process adressing): adresler şu şekilde bölümlenir: proses@makine. Yani 56@453 ifadesi, 453 nolu bilgisayardaki 56 nolu prosesi işaret eder.
- İsim sunucusu (name server): İlgili alandaki (domain) sunucuların isimlerini ve adreslerini indeksler.
- Hedef bulma paketleri (Localization packets): Bir dağıtık sistemdeki tüm bilgisayarlara gönderilen broadcast mesajlarıyla hedef bilgisayarların adreslerinin öğrenilmesidir.
- Tüccar (trader): Bir dağıtık sistemdeki hizmetleri indeksleyen bir sistemdir.
Yukarıda belirtmiş olduğumuz iki tür sunucu istemci ilişkisi vardı. Bunlardan biri Server/Client diğeri ise Peer-to-peerdir. Şimdi iki türlü olan bu mimarileri biraz daha ayrıntılı anlatacak olursak;
http://i.hizliresim.com/nMq181.png
Server/Client: Oyunlarda sistemin bir bütün olarak bir elden çalışabilmesi için iyi bir yöntem diyebiliriz. Aslında bu mimaride çoğu işi server yapar. Clientler yapılan girişleri servera iletmekle ve sonuçlarını ekranda göstermekle mesuldürler. Yani kısacası oyunda kullandığımız klavye ve fare girişlerini servera iletir ve kendisine dönen cevapları işler. Server ise oyunun seyrini belirler bütün hesaplamalar, yapay zekâ algoritmaları, fiziksel hesaplamaları ve clientlerden gelen girişleri oyuna ilave eder ve durumu clientlerine bildirir. İkinci mimari olanda peer-to-peer: Server/client mimarisine ek olarak dağıtılmış bir mimaridir. Peer-to-peer mimarisi iki veya daha fazla bilgisayar kaynaklarını merkezi olmayan sistemlerde kullanılmaktadır. Bu sistemlerde hiyerarşik yapı olmadığı için sıra vardır ve bu sıra ağ içerisinde kuyruk olarak adlandırılmaktadır. Ağ içerisinde bulunan her bilgisayar birer sunucu olama ihtimaline sahiptir bu yüzden ağ üzerinde fazla yük varsa bu bilgisayarlar üzerinde yük dağılımı yapılmaktadır. Bu yöntem aslında İnternet ağ üzerinde pek kullanışlı olmamaktadır daha çok local ağ üzerinden işlemektedir.
Konuyu özetleyecek olursak, Birçok oyun artık internet üzerinden veya LAN ağı kullanılarak oynanabiliyor. Oyunların multiplayer olarak oynanabilmesi için bilgisayarlara yüklü olan programların birbiri ile haberleşebilmesi ve durumlarını birbirine iletmesi gerekiyor. Bilgisayarların birbiri arasında haberleşmesi için genel olarak iki tür sistemden bahsedebiliriz. Bunlar Peer to Peer ve server/client mimarisi. Peer to Peer ağları her bilgisayarın birbiri ile direkt haberleşebildiği ve oyunun seyrinin her bilgisayar da hesaplanması gereken bir network yapısı. Peer to peer networkte bilgisayarların birbiri ile haberleşmesi ve kontrolü server client mimarisine göre hızlı ve kolay olmasına karşın sistem güvenliğini sağlamak daha zor. Çünkü clientler arasındaki iletişim server üzerinden olmakta.
Server ise oyunun seyrini belirler bütün hesaplamalar, yapay zekâ algoritmaları, fiziksel hesaplamaları ve clientlerden gelen girişleri oyuna ilave eder ve durumu clientlerine bildirir.
Serverın görevlerinden bahsedersek.
- Fiziksel hesaplamalar
- Yapay zekâ algoritmaları
- Çarpışma testleri
- İletişimi sağlama
Tabi bu işleri gerçekleştirmek için ve sistem performansını artırmak için birçok ileri seviye algoritmalardan faydalanmak gerekiyor.
Günümüzde oynadığınız bütün online oyunların mantığı bu şekilde çalışmaktadır. Aslında bu tür oyunların hacklenmesi kolay olarak gürünse de oyun içerisindeki algoritmalar bu kolaylığı zorlaştırmaktadırlar.
Bunu bulmak tam 21 günümü aldı o kadar çok uğraştımki aldığım no'tlarla ve testlerle sonucu ortaya döktüm bir teşekkür etmeyi unutmayın
Bu konumuzda inşAllah Multiplayer oyunlarındaki Sunucu client ilişkisini anlatmaya çalışacağım. Hızla gelişen teknolojide sadece yazılımlar ve donanım parçaları da yenilik göstermemektedir. Bu yeniliklerin içerisinde de oyunlarda mevcuttur. Günümüz teknolojisinde artık Online oyun popüler bir şekilde yerini almıştır. İnsanoğlu makinaya karşı değil de karşısında da bir insanın olduğu oyunları oynamakta tercih ediyor. Bu sebepten ötürü oyun üreticileri oyunlarını artık Multiplayer özelliğini daha aktif ve ön planda tutmaya çalışıyorlar.
İstemci-Sunucu Nasıl İşler?
İlk önce istemci-sunucu hakkında ufak bir bilgi verelim daha sonra aralarındaki ilişkiyi anlatayım.
İstemci, daha çok grafik arayüzlü olup yaşamını bir veya birden fazla kaynağa bağlayarak kullanıcıya hizmet vermek amaçlıdır. Sunucu, ana makinalardan yâda veritabanı gibi hizmetlerin bulunduğu istemcilerin kaynak için bağlandığı serverlardır.
İstemci-Sunucu, ölçeklenebilir bir mimari hizmeti sunmaya çalışır bu sayede istemci sunucu arasında sürekli bir tcp alış verişi vardır. Ağ üzerinde yâda bağlantılar üzerinde ki bu ağlarda lan wan olabilir yani sadece local ağımız olarak kısıtlamak yanlış olur, istemci yâda sunucu bu ağlar üzerinde ki rollerini üstlenir ve sunucu hizmet vermeye istemci ise hizmet almaya başlar. Sunucu için her zaman güçlü dayanıklı ve 7/24 çalışmaya dayanıklı bilgisayarlar tercih edilir ve bu bilgisayarlarda genellikle Server olarak geçmektedir. İstemci için ise o kadar güçlü bilgisayarlara gerek yoktur. Bir thinclient bir işlemi tamamlaya bilmektedir. İstemciler gerek duydukları verinin pek çoğunu ya da tamamını uygulama sunucusundan isterler. Mesela; ayar dosyaları, stok verileri, iş uygulama yazılımları vs. gibi.
Bu ilişkinin pek çok çeşitli uygulaması olmasına rağmen, verebilecek en güzel örnek, İnternet üzerinde ki sayfaları verebiliriz. Bir web sayfasını açtığımızda, bilgisayar veya browserımız istemci olarak görülür. Web sayfasını oluşturan bilgisayar veya veritabanı da sunucu olarak görünmektedir. Web tarayıcısı, web sitesinden bir istekte bulunur ve sunucu istenen bilgileri toplar ve onu bir web sitesi şekline getirerek web tarayıcısına geri yollar, kullanıcılar da ekranda web sitesini görmüş olur. Bu sayede sunucu-istemci ilişkisi kurulmuş olmaktadır.
Sunucunun özellikleri:
- Pasif
- İstekleri bekler
- İstek olduğunda bilgiyi sunar ve cevap yollar
İstemcinin özellikleri:
- Aktif
- İstekleri gönderir
- Cevap dönene kadar bekler
Sunucular genellikle durumsuz (stateless) veya durumlu (stateful) olurlar. Durumsuz olduklarında ise bilgi tutmazlar. Durumlu bir sunucu kendine gelen istekler arasında bilgi tutar ve bu bilgi küresel veya oturum bazlı olmaktadır. Durumlu bir sunucuya örnek verecek olursak Apache Tomcat sunucusunu verebiliriz. İstemci ve sunucu arasında ki ilişki genelde ardışık diyagramlar ile belirlenir ve bu diyagramlar UML standardına uygun yapılır.
Bir diğer istemci sunucu mimarisi ise peer-to-peer yapılardır. Bu yapıda her bir düğüm, hem istemci hem de sunucudur. Hepsi de anı sorumluluğa sahiptirler. Hem istemci sunucu mimarisi hemde peer to peer mimarisi günümüzde kullanımı az olan bir yapıdır.
Günümüzde kullanılan istemci sunucu mimarisinde iki adet düğüm vardır. Bu iki adet düğümün olması sebebiyle iki katmanlı mimari olarak adlandırılır. Bazı ağlarda üç düğümlü bir yapı olabilir. Örnek olarak istemci, uygulama sunucusu ve veritabanı sunucusu olmak üzere üç adet düğüm vardır. Bu yapılara üç katmanlı mimari olarak adlandırılmaktadır.
Genelde mimarilerde n-katmanlı ya da çok-katmanlı mimarilerde iş mantığının farklı fonksiyonları için her bir hizmetle sorumlu ayrı bir sunucu görevlendirilir. Çok-katmanlı mimarinin iki-katmanlı mimariye göre avantajı daha iyi yük dengeleme sunması ve daha çok ölçeklenebilir olmasıdır. Dezavantajları ise ağa daha fazla yük getirmesi ve programlama ve test aşamalarının daha zor gerçekleştirilmesidir.
İstemci sunucu mimarilerde adresleme çeşitli yöntemler ile gerçekleştirilir:
- Makine proses adreslemesi (machine process adressing): adresler şu şekilde bölümlenir: proses@makine. Yani 56@453 ifadesi, 453 nolu bilgisayardaki 56 nolu prosesi işaret eder.
- İsim sunucusu (name server): İlgili alandaki (domain) sunucuların isimlerini ve adreslerini indeksler.
- Hedef bulma paketleri (Localization packets): Bir dağıtık sistemdeki tüm bilgisayarlara gönderilen broadcast mesajlarıyla hedef bilgisayarların adreslerinin öğrenilmesidir.
- Tüccar (trader): Bir dağıtık sistemdeki hizmetleri indeksleyen bir sistemdir.
Yukarıda belirtmiş olduğumuz iki tür sunucu istemci ilişkisi vardı. Bunlardan biri Server/Client diğeri ise Peer-to-peerdir. Şimdi iki türlü olan bu mimarileri biraz daha ayrıntılı anlatacak olursak;
http://i.hizliresim.com/nMq181.png
Server/Client: Oyunlarda sistemin bir bütün olarak bir elden çalışabilmesi için iyi bir yöntem diyebiliriz. Aslında bu mimaride çoğu işi server yapar. Clientler yapılan girişleri servera iletmekle ve sonuçlarını ekranda göstermekle mesuldürler. Yani kısacası oyunda kullandığımız klavye ve fare girişlerini servera iletir ve kendisine dönen cevapları işler. Server ise oyunun seyrini belirler bütün hesaplamalar, yapay zekâ algoritmaları, fiziksel hesaplamaları ve clientlerden gelen girişleri oyuna ilave eder ve durumu clientlerine bildirir. İkinci mimari olanda peer-to-peer: Server/client mimarisine ek olarak dağıtılmış bir mimaridir. Peer-to-peer mimarisi iki veya daha fazla bilgisayar kaynaklarını merkezi olmayan sistemlerde kullanılmaktadır. Bu sistemlerde hiyerarşik yapı olmadığı için sıra vardır ve bu sıra ağ içerisinde kuyruk olarak adlandırılmaktadır. Ağ içerisinde bulunan her bilgisayar birer sunucu olama ihtimaline sahiptir bu yüzden ağ üzerinde fazla yük varsa bu bilgisayarlar üzerinde yük dağılımı yapılmaktadır. Bu yöntem aslında İnternet ağ üzerinde pek kullanışlı olmamaktadır daha çok local ağ üzerinden işlemektedir.
Konuyu özetleyecek olursak, Birçok oyun artık internet üzerinden veya LAN ağı kullanılarak oynanabiliyor. Oyunların multiplayer olarak oynanabilmesi için bilgisayarlara yüklü olan programların birbiri ile haberleşebilmesi ve durumlarını birbirine iletmesi gerekiyor. Bilgisayarların birbiri arasında haberleşmesi için genel olarak iki tür sistemden bahsedebiliriz. Bunlar Peer to Peer ve server/client mimarisi. Peer to Peer ağları her bilgisayarın birbiri ile direkt haberleşebildiği ve oyunun seyrinin her bilgisayar da hesaplanması gereken bir network yapısı. Peer to peer networkte bilgisayarların birbiri ile haberleşmesi ve kontrolü server client mimarisine göre hızlı ve kolay olmasına karşın sistem güvenliğini sağlamak daha zor. Çünkü clientler arasındaki iletişim server üzerinden olmakta.
Server ise oyunun seyrini belirler bütün hesaplamalar, yapay zekâ algoritmaları, fiziksel hesaplamaları ve clientlerden gelen girişleri oyuna ilave eder ve durumu clientlerine bildirir.
Serverın görevlerinden bahsedersek.
- Fiziksel hesaplamalar
- Yapay zekâ algoritmaları
- Çarpışma testleri
- İletişimi sağlama
Tabi bu işleri gerçekleştirmek için ve sistem performansını artırmak için birçok ileri seviye algoritmalardan faydalanmak gerekiyor.
Günümüzde oynadığınız bütün online oyunların mantığı bu şekilde çalışmaktadır. Aslında bu tür oyunların hacklenmesi kolay olarak gürünse de oyun içerisindeki algoritmalar bu kolaylığı zorlaştırmaktadırlar.
Bunu bulmak tam 21 günümü aldı o kadar çok uğraştımki aldığım no'tlarla ve testlerle sonucu ortaya döktüm bir teşekkür etmeyi unutmayın

