Gereksinimler: Aynı sunucuda, süreçler anonim boru hatları, adlandırılmış boru hatları, bellek haritalama dosyaları, HTTP, TCP, Standart Giriş/Çıkış Akışları vb. kullanarak birbirleriyle iletişim kurar. Bazen sunucular birden fazla uygulama dağıtmak zorunda kalır ve uygulamalar gRPC ve Unix alan soketleri kullanarak birbirleriyle iletişim kurabilir.
eleştiri
Unix alan soketleri
Unix Alan Soketleri (UDS), Yerel Soketler veya Süreçlerarası İletişim (IPC) soketleri, aynı Unix veya Unix benzeri işletim sisteminde çalışan süreçler arasında veri alışverişi yapan iletişim uç noktalarıdır.
Unix alan soketi adı, soket sistem kaynağını oluşturan fonksiyona aktarılan alan parametre değerini ifade eder. Aynı iletişim alanı da seçilir. [ 1 ] AF_UNIXAF_LOCAL
typeUDS için geçerli parametre değerleri şunlardır:
- SOCK_STREAM (TCP ile karşılaştırıldığında) – Akış odaklı soketler için kullanılır
- SOCK_DGRAM (UDP ile karşılaştırıldığında) – mesaj sınırlarını korumak için datagram odaklı bir soket (çoğu UNIX uygulamasında olduğu gibi, UNIX alan datagram soketleri her zaman güvenilirdir ve datagramları yeniden sıralamaz)
- SOCK_SEQPACKET (SCTP ile karşılaştırıldığında) – Mesaj sınırlarını koruyan ve gönderildikleri sırayla mesaj ileten bağlantılar için ardışık paket soketleri
UDS aracı, POSIX işletim sisteminin standart bir bileşenidir.
Neden Unix alan soketlerini kullanıyorum?
Unix alan soketleri, tek bir makinede süreçler arası iletişim imkanı sağlar. Peki neden TCP/IP yerine onları seçersin? Örneğin, TCP/IP'de tek sunucu iletişimi için bir loopback adresi (localhost) kullanılabilir. Windows'ta, neden Windows Adlandırma Boru Hatları yerine onları seçersin?
Genel olarak, süreçlerarası iletişim için TCP/IP yerine UDS kullanmayı seçmenizin birkaç nedeni vardır:
- Unix alan soketleri genellikle TCP/IP kullanımına göre daha az yük ve daha hızlı aktarım hızlarına sahiptir
- TCP/IP soketleri sonlu bir kaynaktır, Unix alan soketlerinin ise kesin sınırları yoktur
- Unix alan soketleri dosya formunda gelir, bu yüzden bilinen yolları kolayca "keşfetmek" mümkün
- Dosya sistemleriyle entegrasyon ayrıca ekstra bir güvenlik katmanı ekler (dosya yoluna erişiminiz yoksa socket'e erişemezsiniz)
İlk nokta anlaşılması kolaydır - hızlı bir Google yapmanız UDS ve TCP/IP benchmarklarının her zaman UDS'den daha iyi olduğunu gösterir çünkü sadece çok daha düşük gecikmeye sahip değil, aynı zamanda çok daha yüksek verimliliğe sahiptir. Bunun başlıca nedeni, UDS'nin aynı sunucuyla iletişim için optimize edilmiş olmasıdır.IP iletişimi için, localhost hem gönderici hem de alıcı tarafında IP yığınından geçmelidir。
TCP/IP soketleri sonlu bir kaynaktır; Aynı anda yalnızca 65.535 soketi kullanabilirsiniz. Sorunu eklerseniz, TIME_WAIT maksimum soket sayısı bu değerden çok daha az olabilir. Localhost bağlantısı da bu havuzdaki soketleri tüketir. UDS kullanmak bu sorunu akıllıca bir şekilde önler; TCP/IP soketlerini tüketmeden iletişim sağlar.
sunucu
Yeni bir .NET 8 konsol projesi oluşturun, SDK'yı Microsoft.NET.Sdk.Web olarak değiştirin ve aşağıdaki şekilde yapılandırın:
Greet.proto şu şekilde yapılandırılmıştır:
Kod şöyledir:
Derleme başladıktan sonra, aşağıda gösterildiği gibi:
müşteri
Yeni bir .NET 8 konsol projesi oluşturun ve aşağıdaki kütüphanelere başvurun:
gRPC arayüzünü çağırma yöntemi 10 kez çağrılır ve her çağrı 200 milisaniye boyunca çağrılır ve kod şu şekildedir:
Projeye başlayın ve aşağıdaki şekilde gösterildiği gibi uygulama tamamlandıktan sonra:
Referans:
Bağlantı girişi görünür.
Bağlantı girişi görünür. |