Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 658|Yanıt: 5

[İpucu] .NET/C# süreçleri, gRPC ve Unix alan soketleri arasında iletişim kurar

[Bağlantıyı kopyala]
2025-8-11 tarihinde 20:24:04 tarihinde yayınlandı | | | |
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
.NET/C# NamedPipe tabanlı NamedPipe Çapraz İşlem İletişimi [Kaynak Kodu ile]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C# ebeveyn-çocuk süreçleri MemoryMappedFile kullanarak iletişim kurar
https://www.itsvse.com/thread-10983-1-1.html

.NET/C# ebeveyn-çocuk süreçleri standart giriş/çıkış akışları kullanarak iletişim kurar
https://www.itsvse.com/thread-10982-1-1.html

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.




Önceki:Jetson (1) Jetson Orin Nano Süper Geliştirici Kiti kutudan açıldı
Önümüzdeki:Spring Boot'ta web konteyner netty ve tomcat karşılaştırması
 Ev sahibi| 2025-8-11 tarihinde yayınlandı 20:57:04 |
HttpClientdeğilgRPCve Unix alan soketi iletişimi

sunucu

müşteri

Aşağıda gösterildiği gibi:

 Ev sahibi| 2025-8-12 10:05:14 tarihinde yayınlandı |
ProtocolType.Unspecified: Herhangi bir protokol belirtilmez ve sistem otomatik olarak onu seçer
 Ev sahibi| 2025-8-12 tarihinde 11:02:41 tarihinde yayınlandı |
c# testi normal şekilde UDS'ye bağlanabilir


 Ev sahibi| 2025-9-16 15:26:30 tarihinde yayınlandı |
Unix alan soketlerini proxy etmek için nginx kullanmak (Test edilmedi
Konfigürasyon şöyledir:

UDS'ye öncelik verin: Servisiniz Nginx ile aynı makinedeyse ve yüksek performans ile düşük gecikme arıyorsanız, UDS en iyi seçimdir.
 Ev sahibi| 2025-9-16 tarihinde yayınlandı 17:11:05 |
Nginx ters proxy php-fpm iletişim için UDS kullanır
https://www.itsvse.com/thread-11068-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com