Sobes.tech
Junior

Server va mijoz o'rtasida ma'lumot almashish uchun qanday protokollar mavjud?

sobes.tech AI

AIdan javob

C# .NET dasturida server va mijoz o'rtasida ma'lumot almashish uchun turli protokollar ishlatiladi, ularning tanlovi ilovaning talablariga bog'liq: tezlik, ishonchlilik, xavfsizlik, ma'lumot turi va format.

Asosiy protokollar:

  1. HTTP/HTTPS: Veb-ilovalar uchun eng keng tarqalgan protokollar. HTTP (Hypertext Transfer Protocol) — hipermatn ma'lumotlarini uzatish uchun ilova qatlam protokoli. HTTPS — shifrlash (SSL/TLS) bilan kengaytirilgan, xavfsizlikni ta'minlash uchun.

    • Afzalliklar: Keng qo'llab-quvvatlash, foydalanish uchun oddiy, "bir marta ma'lumot olish" so'rovlariga mos.
    • Kamchiliklar: So'rov-javobga qaratilgan, oqimga uzatish yoki doimiy ikki tomonlama almashinuvi uchun samarali emas.
  2. TCP/IP: Transport protokoli (TCP - Transmission Control Protocol) va tarmoq protokoli (IP - Internet Protocol). TCP paketlarni yetkazib berishni kafolatlaydi va oqimni boshqaradi. Ko'pgina yuqori darajadagi protokollar uchun asos bo'lib xizmat qiladi.

    • Afzalliklar: Ishonchlilik, oqimni boshqarish, har qanday ma'lumot turi uchun mos.
    • Kamchiliklar: Ko'proq pastki qatlam, ilova tomonida katta ishlov berishni talab qiladi.
  3. UDP/IP: Tarmoq protokoli (UDP - User Datagram Protocol). TCP dan farqli o'laroq, UDP paketlarni yetkazib berishni va tartibini kafolatlamaydi, ammo kamroq ortiqcha xarajatlar bilan.

    • Afzalliklar: Yuqori tezlik, past kechikishlar, oqimga uzatish uchun mos (audio, video), ma'lumotning bir qismini yo'qotish mumkin.
    • Kamchiliklar: Ishonchsiz, paketlarning tartibi va yo'qolishini nazorat qilmaydi.
  4. WebSocket: Bir TCP ulanishi orqali to'liq dupleks aloqani ta'minlaydigan protokol. Server va mijozga istalgan vaqtda ma'lumot yuborish imkonini beradi.

    • Afzalliklar: To'liq dupleks aloqa, past kechikishlar, real vaqtda almashinuvi uchun samarali.
    • Kamchiliklar: Qo'llab-quvvatlash eski brauzerlar yoki mijozlarda farq qilishi mumkin.
  5. gRPC: Google tomonidan ishlab chiqilgan yuqori samarali RPC (Remote Procedure Call) tizimi. Transport uchun HTTP/2 va serializatsiya uchun Protocol Buffers dan foydalanadi.

    • Afzalliklar: Yuqori ishlash, kuchli kontraktatsiya, oqimli ma'lumot uzatish, ko'p tillarda qo'llab-quvvatlash.
    • Kamchiliklar: RESTful HTTP ga nisbatan sozlash qiyinroq bo'lishi mumkin.
  6. .NET Remoting (eskirgan): .NET Framework uchun eski texnologiya, jarayonlararo muloqot uchun. Yangi kod uchun tavsiya etilmaydi.

  7. WCF (Windows Communication Foundation) (for .NET Framework): Microsoftning tarqatilgan ilovalar uchun yagona modeli. Turli protokollar (TCP, HTTP, MSMQ) va formatlarni qo'llab-quvvatlaydi.

    • Afzalliklar: Moslashuvchanlik, turli protokollar va formatlarni qo'llab-quvvatlash, xavfsizlik.
    • Kamchiliklar: Murakkablik, .NET ga xos, .NET Core+ da kamroq dolzarb.
  8. ASP.NET Core SignalR: ASP.NET Core uchun kutubxona, ilovalarga real vaqtda funksionallik qo'shishni soddalashtiradi. WebSocket, Server-Sent Events yoki Long Polling ni transport sifatida ishlatadi.

    • Afzalliklar: Real vaqtda funksionallikni oson amalga oshirish, eng yaxshi transportni avtomatik tanlash.
    • Kamchiliklar: Veb-scenariylar uchun mo'ljallangan.

C# da HTTP mijozidan foydalanish misoli:

// 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(); // Kod muvaffaqiyatli bo'lmagan taqdirda xato chiqaradi
            string responseBody = await response.Content.ReadAsStringAsync();
            return responseBody;
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine($"HTTP xatosi: {e.Message}");
            return null;
        }
    }
}

Oddiy TCP-server misoli:

// 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; // yoki IPAddress.Any
        server = new TcpListener(localAddr, port);

        server.Start();
        Console.WriteLine($"TCP serveri {localAddr}:{port} da ishga tushirildi");

        while (true)
        {
            Console.WriteLine("Ulanishni kutmoqda...");
            TcpClient client = await server.AcceptTcpClientAsync();
            Console.WriteLine("Ulanish o'rnatildi!");

            // Haqiqiy ilovalarda ulanishni alohida oqim yoki Task da ishlash kerak
            NetworkStream stream = client.GetStream();

            byte[] buffer = new byte[256]; // Ma'lumotlarni o'qish uchun bufer
            int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
            string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"Olingan: {data}");

            // Javob yuborish
            byte[] msg = Encoding.UTF8.GetBytes("Salom, mijoz!");
            await stream.WriteAsync(msg, 0, msg.Length);
            Console.WriteLine("Yuborildi: Salom, mijoz!");

            client.Close();
        }
    }
    catch (SocketException e)
    {
        Console.WriteLine($"Socket xatosi: {e.Message}");
    }
    finally
    {
        server?.Stop();
    }
}

Protokol tanlovi aniq vazifa talablariga bog'liq. Standart API o'zaro ta'sirlar uchun odatda HTTP/HTTPS ishlatiladi. Real vaqtda ilovalar, masalan, chatlar uchun WebSocket yoki SignalR afzalroq. Yuqori samarali mikroservislararo muloqot uchun gRPC mos keladi.