Server və müştəri arasında məlumat mübadiləsi üçün mövcud protokollar hansılardır?
sobes.tech Süni İntellekt
AI-dan cavab
C# .NET daxilində server və müştəri arasında məlumat mübadiləsi üçün müxtəlif protokollar istifadə olunur, hansının seçimi tətbiqin tələblərinə əsaslanır: sürət, etibarlılıq, təhlükəsizlik, məlumat növü və format.
Əsas protokollar:
-
HTTP/HTTPS: Veb tətbiqlər üçün ən çox yayılmış protokollar. HTTP (Hypertext Transfer Protocol) hipertext məlumatların ötürülməsi üçün tətbiq qat protokoludur. HTTPS isə şifrələmə (SSL/TLS) ilə genişləndirilmişdir və təhlükəsizliyi təmin edir.
- Üstünlüklər: Geniş dəstək, istifadəsi asandır, "bir dəfə məlumat əldə et" tipli sorğular üçün uyğundur.
- Çatışmazlıqlar: Sorğu-cavab yönümlüdür, axın və ya davamlı iki tərəfli mübadilə üçün effektiv deyil.
-
TCP/IP: Transport protokolu (TCP - Transmission Control Protocol) və şəbəkə protokolu (IP - Internet Protocol). TCP paketlərin çatdırılmasını təmin edir və axın idarəsini həyata keçirir. Bu, çoxsaylı yüksək səviyyəli protokollar üçün əsasdır.
- Üstünlüklər: Etibarlılıq, axın idarəsi, hər növ məlumat üçün uyğundur.
- Çatışmazlıqlar: Daha aşağı səviyyəli, tətbiq tərəfində daha çox işləmə tələb edir.
-
UDP/IP: Şəbəkə protokolu (UDP - User Datagram Protocol). TCP-dən fərqli olaraq, UDP paketlərin çatdırılmasını və sırasını təmin etmir, lakin daha az overhead-ə malikdir.
- Üstünlüklər: Yüksək sürət, aşağı gecikmə, məlumat axını üçün uyğundur (audio, video), məlumatın bir hissəsinin itirilməsi qəbul edilə bilər.
- Çatışmazlıqlar: Etibarsız, paketlərin sırasını və itirilməsini nəzarət etmir.
-
WebSocket: Bir TCP əlaqəsi vasitəsilə tam dupleks əlaqəni təmin edən protokol. Server və müştəri istənilən vaxt məlumat göndərə bilər.
- Üstünlüklər: Tam dupleks əlaqə, aşağı gecikmə, real vaxtda mübadilə üçün effektiv.
- Çatışmazlıqlar: Köhnə brauzerlərdə və ya müştərilərdə dəstək fərqli ola bilər.
-
gRPC: Google tərəfindən hazırlanmış yüksək performanslı uzaq prosedur çağırış sistemi. HTTP/2 istifadə edir və serializasiya üçün Protocol Buffers-dən istifadə edir.
- Üstünlüklər: Yüksək performans, güclü müqavilə, axınla məlumat ötürmə, çoxdillilik dəstəyi.
- Çatışmazlıqlar: RESTful HTTP ilə müqayisədə qurulması daha çətin ola bilər.
-
.NET Remoting (köhnə): .NET Framework üçün köhnə texnologiya, proseslərarası əlaqə üçün. Yeni kod üçün tövsiyə edilmir.
-
WCF (Windows Communication Foundation) (for .NET Framework): Microsoft-un paylanmış tətbiqlər üçün vahid modeli. Müxtəlif protokolları (TCP, HTTP, MSMQ) və mesaj formatlarını dəstəkləyir.
- Üstünlüklər: Elastiklik, müxtəlif protokollar və formatlar dəstəyi, təhlükəsizlik.
- Çatışmazlıqlar: Çətinlik, .NET-ə xasdır, .NET Core+ də daha az aktualdır.
-
ASP.NET Core SignalR: ASP.NET Core üçün kitabxana, real vaxt funksionallığını tətbiqlərə əlavə etməyi sadələşdirir. WebSocket, Server-Sent Events və ya Long Polling istifadə edir.
- Üstünlüklər: Real vaxt funksionallığını asan həyata keçirmək, ən yaxşı transportu avtomatik seçmək.
- Çatışmazlıqlar: Veb ssenarilərə yönəlikdir.
C#-da HTTP müştərisinin istifadəsinə nümunə:
// using System.Net.Http;
// using System.Threading.Tasks;
public async Task<string> GetDataFromApiAsync(string url)
{
using (HttpClient client = new HttpClient())
{
try
{
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode(); // Uğursuz status kodu halında istisna atır
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP xətası: {e.Message}");
return null;
}
}
}
Sadə TCP server nümunəsi:
// using System.Net;
// using System.Net.Sockets;
// using System.Text;
// using System.Threading.Tasks;
public async Task StartTcpServerAsync(int port)
{
TcpListener server = null;
try
{
IPAddress localAddr = IPAddress.Loopback; // və ya IPAddress.Any
server = new TcpListener(localAddr, port);
server.Start();
Console.WriteLine($"TCP serveri {localAddr}:{port} da işə düşdü");
while (true)
{
Console.WriteLine("Qoşulma gözlənilir...");
TcpClient client = await server.AcceptTcpClientAsync();
Console.WriteLine("Qoşulma quruldu!");
// Əsl tətbiqlərdə qoşulmanı ayrı bir thread və ya Task-da işləmək lazımdır
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[256]; // Məlumat oxumaq üçün buffer
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Alınan: {data}");
// Cavab göndərilir
byte[] msg = Encoding.UTF8.GetBytes("Salam, müştəri!");
await stream.WriteAsync(msg, 0, msg.Length);
Console.WriteLine("Göndərildi: Salam, müştəri!");
client.Close();
}
}
catch (SocketException e)
{
Console.WriteLine($"Socket xətası: {e.Message}");
}
finally
{
server?.Stop();
}
}