Sobes.tech
Middle

რა არის SignalR?

sobes.tech AI

პასუხი AI-სგან

SignalR — ეს არის ბიბლიოთეკა ASP.NET Core-ისთვის, რომელიც საშუალებას აძლევს დაამატოთ WebSocket და Long Polling ფუნქციონალობა ვებ-აპლიკაციებში, რათა შექმნათ რეალურ დროში ინტერაქტიული სცენარები.

მიწოდებს ორ მხარეს შორის ურთიერთკავშირს სერვერზე და კლიენტზე.

ძირითადი გამოყენების სცენარები:

  • ჩატ-აპლიკაციები.
  • ონლაინ თამაშები.
  • მონაცემების რეალურ დროში განახლება (მაგალითად, გრაფიკები, შეტყობინებები).
  • მომხმარებლების აქტივობის მონიტორინგი.

ძირითადი კომპონენტები:

  • ჰაბები (Hubs): კლასები, რომლებიც მართავენ შემომავალ ზარებს მომხმარებლებისგან და აგზავნიან შეტყობინებებს მომხმარებლებს.
  • კავშირები (Connections): წარმოადგენს მომხმარებლის კავშირებს. შეიძლება დამყარებული იყოს WebSocket, Server-Sent Events ან Long Polling-ის საშუალებით (მომხმარებლის და სერვერის მხარდაჭერის მიხედვით).

ჰაბის შექმნის მაგალითი:

// MyHub.cs
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

public class MyHub : Hub
{
    // მეთოდი, რომელიც შეიძლება გამოიძახოს მომხმარებელმა
    public async Task SendMessage(string user, string message)
    {
        // შეტყობინების გაგზავნა ყველა დაკავშირებულ მომხმარებელს
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

კონფიგურაცია Startup.cs-ში:

// In ConfigureServices
services.AddSignalR();

// In Configure
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<MyHub>("/myhub"); // ჰაბის მაპინგი URL-თან
});

კლაიენტის მხარე (JavaScript):

// npm ვერსია
// npm install @microsoft/signalr

const hubConnection = new signalR.HubConnectionBuilder()
    .withUrl("/myhub") // ჰაბის URL
    .build();

// შემომავალი შეტყობინებების დამუშავება
hubConnection.on("ReceiveMessage", (user, message) => {
    // მიღებული შეტყობინების დამუშავების ლოგიკა
    console.log(`${user}: ${message}`);
});

// კავშირის გახსნა
hubConnection.start()
    .then(() => console.log("კავშირი დაიწყო"))
    .catch(err => console.error(err.toString()));

// შეტყობინების გაგზავნა სერვერზე
// hubConnection.invoke("SendMessage", "კლიენტი", "გამარჯობა კლიენტიდან!");

SignalR ავტომატურად ირჩევს ოპტიმალურ ტრანსპორტს მომხმარებლის და სერვერის შესაძლებლობების მიხედვით, დაწყებული WebSocket-ით და გადართვა უფრო ძველ პროტოკოლებზე, თუ საჭიროია. ეს უზრუნველყოფს ფართო თავსებადობას.