# RPC'ler Nedir ?

**RPC** (Remote Procedure Call), ağ üzerinden uzak bir fonksiyonun çağrılması anlamına gelir. Unreal Engine'deki çok oyunculu oyunlarda, RPC'ler, istemciler ve sunucu arasında fonksiyon çağrıları yapabilmeyi sağlar. Bu, bir oyuncunun veya sunucunun diğer oyuncularla etkileşime girerken ağ üzerinden veri iletmesini ve işlemler yapmasını kolaylaştırır. RPC'ler, özellikle oyun içi etkileşimlerde, durum güncellemelerinde ve olayların diğer oyunculara senkronize edilmesinde kritik bir rol oynar.

#### **RPC Türleri**

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FeHmcOlrXFadVW2yTrbDD%2Fimage.png?alt=media&#x26;token=1f3402c3-9d64-4201-ac12-371fcce5b956" alt=""><figcaption></figcaption></figure>

* **Client RPC (İstemci RPC):**\
  Bir Client RPC, sunucudan bir istemciye çağrıldığında, bu fonksiyon yalnızca o aktörü sahiplenen istemcide çalışır. Bu, sadece belirli bir oyuncuya özel işlemler yapmanızı sağlar. Örneğin, bir oyuncunun envanterine bir öğe eklemek ya da bir animasyonu başlatmak gibi işlemler sadece o oyuncunun cihazında gerçekleşir ve diğer istemcilerden etkilenmez.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2Fx69WZjh946UFhKzF6suI%2Fimage.png?alt=media&#x26;token=71670b2c-75e1-45ba-860b-7cb95af53079" alt="" width="563"><figcaption></figcaption></figure>

* **Server RPC (Sunucu RPC):**\
  Server RPC, bir istemciden sunucuya çağrıldığında, bu fonksiyon sunucuda çalışır. Genellikle, istemcinin sunucuya veri göndermesi gereken durumlarda kullanılır. Örneğin, bir oyuncunun etkileşime girmesi ya da bir durum bildirmesi gerektiğinde, bu fonksiyon sunucuda çalışarak bilgiyi diğer istemcilere yayabilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FXxWE2M2rimRAUBpD1pOf%2Fimage.png?alt=media&#x26;token=7fa85509-375c-4dcb-9b6b-110d655c255f" alt="" width="563"><figcaption></figcaption></figure>

* **Multicast RPC:**\
  Multicast RPC, sunucudan çağrıldığında, bu fonksiyon hem sunucuda hem de tüm istemcilerde çalışır. Sunucunun bir eylemi tüm istemcilere yaymak istediği durumlarda kullanılır. Örneğin, patlamalar, önemli animasyonlar ya da oyun dünyasındaki büyük olaylar gibi tüm oyuncuların aynı anda görmesi gereken durumlar için idealdir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FPkIoRd6Syc7u1TbpxCxL%2Fimage.png?alt=media&#x26;token=5b6a3579-d349-426b-b25c-84880ffbee05" alt="" width="563"><figcaption></figcaption></figure>

#### **RPC Türleri ve Relevancy**

Multicast RPC'ler için **relevancy** durumu bir faktördür. Eğer bir istemci, aktörle ilgili geçerli bir kanal (channel) açmamışsa, Multicast RPC'yi almayabilir. Bu nedenle, **Multicast RPC'ler**, kalıcı durum değişikliklerini istemcilere çoğaltmak için her zaman güvenilir bir yöntem olmayabilir. Bunun yerine, önemli durum değişiklikleri için **Server RPC** kullanılabilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FRtn5bYVDCDycxrs3Xdm0%2Fimage.png?alt=media&#x26;token=3718345d-64af-459f-8ca0-8ea9706e2cc2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2F3xXSIofz7yyepOBdiyC8%2Fimage.png?alt=media&#x26;token=6336aca9-6bef-4f31-b3b6-d910ee75e4a5" alt=""><figcaption></figcaption></figure>

#### **Güvenilir (Reliable) ve Güvenilmez (Unreliable) RPC'ler**

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2F173wntteUsNj6Ni83jg1%2Fimage.png?alt=media&#x26;token=4787e9df-228b-48a2-8252-abb03e394e63" alt=""><figcaption></figcaption></figure>

RPC'ler **güvenilir (reliable)** veya **güvenilmez (unreliable)** olarak tanımlanabilir.

* **Güvenilmez RPC'ler (Unreliable):**\
  Bant genişliği doyumuna ulaşıldığında kaybolabilirler ve bu tür RPC'lerin varışı garanti edilmez. Bu, önemli olmayan güncellemeler için idealdir, çünkü bant genişliği doygunluğu durumunda kaybolan verilerin herhangi bir etkisi olmayacaktır. Ancak, bu tür RPC'ler sıralı varışları garanti etmez, yani gönderildikleri sıraya göre alınmayabilirler.
* **Güvenilir RPC'ler (Reliable):**\
  Güvenilir RPC'lerin varışı garantilidir ve sıralı bir şekilde iletilir. Bu tür RPC'ler, oyun oynanışı için kritik olan fonksiyon çağrıları için gereklidir, çünkü verilerin kaybolmaması ve doğru sırayla iletilmesi gerekir. Ancak, aşırı kullanımı bant genişliği doygunluğuna yol açabilir ve ağda darboğazlar oluşturabilir.

<figure><img src="https://499018633-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZiZeirBAvbtaBiMPpunl%2Fuploads%2FK6rlVb7olimDW8ITZiym%2Fimage.png?alt=media&#x26;token=4dac6e3d-7397-4bc2-8ca8-97f4d2f96f73" alt=""><figcaption></figcaption></figure>
