Sobes.tech
Junior

Кадом протоколҳо барои мубодилаи маълумот байни сервер ва мизоҷ вуҷуд доранд?

sobes.tech AI

Ҷавоб аз AI

Барои мубодилаи маълумот байни сервер ва клиент дар муҳити C# .NET истифодаи протоколҳои гуногун мешавад, ки интихоби онҳо вобаста ба талаботи барнома аст: суръат, эътимоднокӣ, бехатарӣ, навъи маълумот ва формат.

Протоколҳои асосӣ:

  1. HTTP/HTTPS: Протоколҳои маъмултарин барои барномаҳои веб. HTTP (Hypertext Transfer Protocol) протоколи сатҳи барнома барои интиқоли маълумоти гипертекст мебошад. HTTPS — васеъкунии он бо истифодаи рамзгузорӣ (SSL/TLS) барои таъмини бехатарӣ.

    • Афзалиятҳо: Дастгирии васеъ, осон истифода, мувофиқ барои дархостҳо/посухҳо навъи "як маротиба гирифтани маълумот".
    • Норасогӣ: Тамаркуз ба дархост-посух, номуносиб барои интиқоли потокӣ ё мубодилаи дуҷониба доимӣ.
  2. TCP/IP: Протоколи интиқол (TCP - Transmission Control Protocol) ва протоколи шабакавӣ (IP - Internet Protocol). TCP кафолат медиҳад, ки пакетҳо расонида мешаванд ва идоракунии ҷараёнро таъмин мекунад. Замин барои бисёре аз протоколҳои сатҳи баланд.

    • Афзалиятҳо: Эътимоднокӣ, идоракунии ҷараён, мувофиқ барои ҳар навъи маълумот.
    • Норасогӣ: Нишондиҳандаи сатҳи поёнӣ, талаб мекунад, ки логикаи бештар дар ҷонибҳои барнома таҳия шавад.
  3. UDP/IP: Протоколи шабакавӣ (UDP - User Datagram Protocol). Баръакс ба TCP, UDP кафолат намедиҳад, ки пакетҳо расида ва дар тартиб бошанд, аммо хароҷоти камтар дорад.

    • Афзалиятҳо: Суръати баланд, таъхири паст, мувофиқ барои потокӣ кардани маълумот (садо, видео) ки дар он талафоти қисмҳои маълумот иҷозат дода мешавад.
    • Норасогӣ: Номуътадил, назорат намекунад тартиб ва талафоти пакетҳоро.
  4. WebSocket: Протокол, ки пайвастагии дуҷонибаро тавассути як TCP таъмин мекунад. Имкон медиҳад, ки ҳам сервер ва ҳам клиент дар ҳар вақт маълумот фиристанд, бе зарурати пайвастаи дархостҳо.

    • Афзалиятҳо: Пайвастагии дуҷониба, таъхири паст, самаранок барои мубодилаи маълумоти дар вақти воқеӣ.
    • Норасогӣ: Дастгирӣ метавонад дар браузерҳои кӯҳна ё клиентҳо фарқ кунад.
  5. gRPC: Системаи RPC (Remote Procedure Call) бо суръати баланд, таҳияшуда аз ҷониби Google. HTTP/2-ро барои интиқол истифода мебарад ва Protocol Buffers-ро ҳамчун формат барои сериализатсия.

    • Афзалиятҳо: Суръати баланд, шартномаҳои қавӣ, потокӣ кардани маълумот, дастгирии бисёр забонҳо.
    • Норасогӣ: Мушкилот дар танзимот нисбат ба RESTful HTTP.
  6. .NET Remoting (застар): Технологияи кӯҳна барои ҳамкорӣ байни равандҳо дар .NET Framework. Тавсия намешавад барои кодҳои нав.

  7. WCF (Windows Communication Foundation) (барои .NET Framework): Модели ягонаи Microsoft барои сохтани барномаҳои тақсимшуда. Дастгирӣ мекунад протоколҳои гуногун (TCP, HTTP, MSMQ) ва форматҳои паём.

    • Афзалиятҳо: Флексибилӣ, дастгирии протоколҳо ва форматҳо, бехатарӣ.
    • Норасогӣ: Сложност, махсус барои .NET, камтар актуалӣ дар .NET Core+.
  8. ASP.NET Core SignalR: Китобхона барои ASP.NET Core, ки илова кардани функсионалӣ барои вақти воқеиро осон мекунад. Аз WebSocket, Server-Sent Events ё Long Polling истифода мебарад.

    • Афзалиятҳо: Осон кардани татбиқи функсионалӣ барои вақти воқеӣ, интихоби автоматии беҳтарин транспорт.
    • Норасогӣ: Тамаркуз ба сценарии веб.

Масалан барои истифодаи HTTP-клиент дар C#:

// 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(); // Мехоҳад, ки истисно барорад, агар код статуса муваффақ набошад
            string responseBody = await response.Content.ReadAsStringAsync();
            return responseBody;
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine($"Хатои HTTP: {e.Message}");
            return null;
        }
    }
}

Масалан барои сервер TCP оддӣ:

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

        server.Start();
        Console.WriteLine($"Сервер TCP оғоз шуд дар {localAddr}:{port}");

        while (true)
        {
            Console.WriteLine("Чекор барои пайвастшавӣ...");
            TcpClient client = await server.AcceptTcpClientAsync();
            Console.WriteLine("Пайвастшавӣ барқарор шуд!");

            // Дар барномаҳои воқеӣ, коркарди пайвастшавӣ бояд дар ҷудо аз Thread ё Task анҷом дода шавад
            NetworkStream stream = client.GetStream();

            byte[] buffer = new byte[256]; // Буфер барои хондани маълумот
            int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
            string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"Дастрасӣ: {data}");

            // Фиристодани ҷавоб
            byte[] msg = Encoding.UTF8.GetBytes("Салом, клиент!");
            await stream.WriteAsync(msg, 0, msg.Length);
            Console.WriteLine("Фиристодан: Салом, клиент!");

            client.Close();
        }
    }
    catch (SocketException e)
    {
        Console.WriteLine($"Хатои сокет: {e.Message}");
    }
    finally
    {
        server?.Stop();
    }
}