# NetDriver, NetConnection ve Channel Nedir ?

**NetDriver, NetConnection ve Channel** Unreal Engine'deki çok oyunculu ağ yapısının temel bileşenleridir. Her biri, ağ üzerinden veri iletimi ve istemci-sunucu etkileşiminin nasıl gerçekleştiğini yönetir.

1. **NetDriver**:\
   NetDriver, ağ üzerinden veri iletiminin temel yöneticisidir. Unreal Engine'deki ağ iletişimi, NetDriver aracılığıyla yapılır. NetDriver, sunucular ve istemciler arasında bağlantıyı yönetir ve veri paketlerini gönderip alır. Farklı ağ türleri için farklı NetDriver türleri bulunur (örneğin, IP, LAN veya Steam üzerinden).
2. **NetConnection**:\
   NetConnection, bir istemci ile sunucu arasındaki bağlantıyı temsil eder. Bu sınıf, her bir oyuncu için ayrı bir bağlantı oluşturur ve ağ üzerinden veri iletimini sağlamak için NetDriver tarafından kullanılır. NetConnection, bağlantının durumunu takip eder ve veri paketlerini şifreleyip çözer.
3. **Channel**:\
   Channel, bir NetConnection üzerinden iletilen veri akışını temsil eder. Her bir kanal, belirli türdeki veriler için bir bağlantı yoludur (örneğin, oyuncu girişi, ses verisi vb.). Unreal Engine, verilerin doğru şekilde iletilmesi için bir veya birden fazla kanal kullanır. Örneğin, oyuncu verileri için bir kanal, ses verileri için başka bir kanal olabilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2F9nSbpITbJec5ZxsfwXsz%2Fimage.png?alt=media&#x26;token=9fd87dc9-0fd5-477b-bce5-604e236aac78" alt=""><figcaption></figcaption></figure>

## Sunucu başlatıldığında;

Sunucu başlatıldığında, bir **NetDriver** oluşturulur ve bu NetDriver, dış bağlantılardan gelen mesajları dinlemeye başlar. İstemci başlatıldığında ise kendi **NetDriver**'ını oluşturur ve sunucuya bir bağlantı isteği gönderir. Sunucu ve istemci NetDriver'ları iletişim kurduğunda, her bir NetDriver içinde bir **NetConnection** (ağ bağlantısı) kurulur.

* **Sunucu**, bağlanan her oyuncu için ayrı bir **NetConnection** oluşturur.
* **İstemci** tarafında ise yalnızca sunucuya olan bağlantıyı temsil eden tek bir **NetConnection** bulunur.

Her **NetConnection** içinde farklı **Channel**'lar (kanallar) yer alır. Örneğin:

* Genellikle bir **ControlChannel** ve bir **VoiceChannel**  bulunur.
* Ayrıca, replikasyon yapılan her aktör için bir **ActorChannel** (aktör verileri için özel bir kanal) oluşturulur.

Bu sistemin en önemli özelliklerinden biri, replikasyonun **aktör seviyesinde** gerçekleşmesidir. Yani, yalnızca belirli bir oyuncuya "ilgili" (relevant) olarak işaretlenen aktörler için veri aktarımı yapılır. Bu da ağ trafiğini optimize ederek gereksiz veri aktarımını engeller.<br>

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FBsren4xO8tmx2UDwyTew%2Fimage.png?alt=media&#x26;token=7e31722c-711a-448a-bccf-1500f15a9062" alt=""><figcaption></figcaption></figure>

Eğer bir aktörün ağ üzerinden senkronize edilmesi gerekiyorsa, o aktörü replikasyon için uygun hale getirmeniz gerekir. Bu aktör, bir oyuncu için "ilgili" (**Relevant**) olarak işaretlendiyse, sunucu o oyuncunun **NetConnection**'ında bir **ActorChannel** oluşturur. Aktöre ait veriler, bu kanal üzerinden sunucu ile istemci arasında iletilir ve senkronizasyon sağlanır.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FNpxi1SX9Q0vlJAKWcwhl%2Fimage.png?alt=media&#x26;token=9e6d55f2-5ef3-4849-82ac-a9ddc706d003" alt=""><figcaption></figcaption></figure>

#### **Neden Önemlidir?**

Unreal Engine'deki **NetDriver**, **NetConnection** ve **Channel**, çok oyunculu oyunların ağ altyapısının temel taşlarını oluşturur. Bu bileşenler, hem ağ performansını hem de oyuncu deneyimini doğrudan etkileyen hayati öneme sahiptir.

***

**1. NetDriver**

* **NetDriver**, sunucu ile istemciler arasındaki tüm veri alışverişinin kontrol edildiği ana mekanizmadır. Sunucu, oyuncuların gönderdiği verileri işler ve bu bilgileri diğer oyunculara dağıtır.
* Eğer **NetDriver** düzgün yapılandırılmamışsa:
  * Oyuncular oyuna bağlanamayabilir.
  * Veri aktarımında gecikme (**latency**) veya paket kaybı (**packet loss**) yaşanabilir.
* **Neden Önemlidir?**\
  Ağ trafiğinin verimli bir şekilde yönetilmesi, bağlantının kararlı kalması ve oyun içi iletişimin sorunsuz işlemesi için **NetDriver** kritik bir role sahiptir.

***

**2. NetConnection**

* **NetConnection**, her bir oyuncunun sunucuya bağlanmasını ve bağlantının stabil bir şekilde devam etmesini sağlar. Her oyuncunun kendine özel bir **NetConnection**'ı bulunur.
* Eğer **NetConnection** başarısız olursa:
  * Oyuncunun bağlantısı kopar ve oyundan düşer.
  * Sunucu ile istemci arasındaki veri senkronizasyonu bozulur.
* **Neden Önemlidir?**\
  Oyuncuların kesintisiz ve sorunsuz bir oyun deneyimi yaşaması, her bir **NetConnection**'ın stabil çalışmasına bağlıdır.

***

**3. Channel**

* **Channel**, farklı veri türlerini ayrı kanallara ayırarak yönetir. Bu, verilerin düzenli bir şekilde iletilmesini ve ağ trafiğinin optimize edilmesini sağlar.
* **Channel** sayesinde:
  * Oyuncu hareketleri gibi replikasyon yapılan veriler için bir kanal (ActorChannel)
  * Ses verileri için başka bir kanal (**VoiceChannel**) gibi özel veri yolları oluşturulur.
* **Neden Önemlidir?**\
  Verilerin türlerine göre ayrıştırılması, gereksiz veri trafiğini engeller, performansı artırır ve gecikmeyi (**latency**) minimuma indirir.
