Sobes.tech
Junior

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. .NET Remoting (köhnə): .NET Framework üçün köhnə texnologiya, proseslərarası əlaqə üçün. Yeni kod üçün tövsiyə edilmir.

  7. 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.
  8. 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();
    }
}