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-ից և անցում կատարելով ավելի հին պրոտոկոլների՝ նրանց բացակայության դեպքում: Սա ապահովում է լայն համատեղելիություն։