نحوه پیادهسازی ارتباطات بلادرنگ در NET 8 Minimal API با استفاده از SignalR: راهنمای گام به گام

همانطور که کاربردهای مدرن همچنان در حال تکامل هستند، ارتباط بلادرنگ به یک ویژگی حیاتی برای افزایش تجربه کاربر تبدیل شده است. خواه اعلانهای زنده، ابزارهای مشارکتی یا بهروزرسانیهای زنده در داشبورد، SignalR ترکیب شده با حداقل API ها در NET 8 یک راه ساده و کارآمد برای پیاده سازی عملکرد بلادرنگ ارائه می دهد.
در این پست وبلاگ، نحوه ادغام را بررسی خواهیم کرد SignalR با حداقل API ها در NET 8 برای فعال کردن ارتباط بلادرنگ در برنامه شما.
SignalR چیست؟
SignalR کتابخانه ای است که امکان پذیر است قابلیت وب در زمان واقعی در برنامه های NET. این به کد سمت سرور اجازه می دهد تا به روز رسانی ها را فوراً به مشتریان ارسال کند. SignalR از روش های مختلف انتقال پشتیبانی می کند، از جمله وب سوکت ها، رویدادهای ارسال شده توسط سرور، و نظرسنجی طولانیبسته به قابلیت های کلاینت و سرور.
برخی از موارد استفاده معمولی برای SignalR عبارتند از:
- برنامه های چت زنده
- اعلان های زمان واقعی
- ویرایش اسناد مشارکتی
- داشبوردهای تعاملی که در زمان واقعی به روز می شوند
1. راه اندازی یک API حداقل با SignalR
برای شروع، اجازه دهید ابتدا a ایجاد کنیم حداقل API پروژه در NET 8 و ادغام SignalR برای ارتباطات بلادرنگ.
مرحله 1: بسته SignalR را نصب کنید
در پروژه NET 8 خود، نصب کنید Microsoft.AspNetCore.SignalR بسته از طریق NuGet:
dotnet add package Microsoft.AspNetCore.SignalR
مرحله 2: یک هاب برای ارتباطات بلادرنگ تعریف کنید
الف هاب یک کلاس در SignalR است که به عنوان یک خط لوله سطح بالا عمل می کند و به سرور اجازه می دهد با مشتریان ارتباط برقرار کند. بیایید یک هاب ساده برای ارسال پیام تعریف کنیم.
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
را SendMessage
متد پیام را از طریق به همه مشتریان متصل پخش می کند Clients.All.SendAsync
روش
مرحله 3: SignalR را در Program.cs پیکربندی کنید
بعد، میان افزار SignalR را در خود پیکربندی کنید حداقل API پروژه می توانید یک هاب SignalR به آن اضافه کنید Program.cs
با ثبت آن به عنوان بخشی از خط لوله درخواست برنامه.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Add SignalR middleware
app.MapHub<ChatHub>("/chathub");
app.Run();
این امر الف را آشکار می کند /chathub
نقطه پایانی که مشتریان می توانند برای ارتباط بلادرنگ به آن متصل شوند.
2. ایجاد یک کلاینت برای اتصال به SignalR Hub
SignalR از انواع مختلف کلاینت پشتیبانی می کند، از جمله جاوا اسکریپت، دات نت، و جاوا. برای سادگی، اجازه دهید یک را ایجاد کنیم کلاینت جاوا اسکریپت برای اتصال به SignalR هاب ما.
مرحله 1: کتابخانه مشتری SignalR را اضافه کنید
برای اتصال به هاب SignalR از قسمت جلویی، کتابخانه جاوا اسکریپت SignalR را در برنامه مشتری خود قرار دهید. می توانید آن را با استفاده از CDN یا از طریق npm نصب کنید:
"https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.0/signalr.min.js">
مرحله ۲: به هاب وصل شوید و پیامها را مدیریت کنید
در اینجا مثالی از نحوه اتصال به هاب SignalR و ارسال/دریافت پیام با استفاده از جاوا اسکریپت آورده شده است:
"text/javascript">
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.build();
// Start the connection
connection.start().then(() => {
console.log("Connected to SignalR");
}).catch(err => console.error(err));
// Send message to the hub
document.getElementById("sendButton").addEventListener("click", function () {
const user = document.getElementById("userInput").value;
const message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(err => console.error(err));
});
// Receive messages from the hub
connection.on("ReceiveMessage", function (user, message) {
const li = document.createElement("li");
li.textContent = `${user}: ${message}`;
document.getElementById("messagesList").appendChild(li);
});
این اسکریپت به /چاتوب نقطه پایانی، زمانی که کاربر روی دکمه ای کلیک می کند، پیامی ارسال می کند و به پیام های جدید پخش شده توسط سرور گوش می دهد.
3. افزایش SignalR با اعلان های زمان واقعی
اکنون که سیستم پیام رسانی اولیه را راه اندازی کرده ایم، بیایید ببینیم چگونه می توانید از SignalR برای اعلان های زمان واقعی. در بسیاری از برنامهها، مانند داشبوردها یا ابزارهای مشارکتی، کاربران انتظار دارند که در صورت انجام اقدامات خاص، بهروزرسانیهای فوری انجام شود.
مثال: ارسال اعلانهای بلادرنگ
سناریویی را تصور کنید که در آن برنامه شما باید هر زمان که سفارش جدیدی انجام می شود به کاربران اطلاع دهد. در اینجا نحوه پخش اعلان از پشتیبان با استفاده از SignalR آمده است.
public class NotificationHub : Hub
{
public async Task SendOrderNotification(string orderId)
{
await Clients.All.SendAsync("ReceiveNotification", $"New order received: {orderId}");
}
}
شما می توانید این روش را از هر بخشی از برنامه خود فعال کنید، مانند پس از پردازش سفارش:
public async Task ProcessOrder(string orderId)
{
// Process the order...
// Notify clients
var hubContext = app.Services.GetRequiredService<IHubContext<NotificationHub>>();
await hubContext.Clients.All.SendAsync("ReceiveNotification", $"New order: {orderId}");
}
در سمت کلاینت، میتوانید به این اعلانها گوش دهید و UI را در زمان واقعی بهروزرسانی کنید.
"text/javascript">
const connection = new signalR.HubConnectionBuilder()
.withUrl("/notificationhub")
.build();
connection.start().then(() => {
console.log("Connected to Notification Hub");
}).catch(err => console.error(err));
connection.on("ReceiveNotification", function (message) {
alert(message);
});
4. رسیدگی به قطع و وصل مجدد
یکی از چالش های ارتباطات بلادرنگ مدیریت قطعی شبکه یا قطع ارتباط مشتری است. SignalR عملکرد داخلی را برای مدیریت یکپارچه اتصالات مجدد ارائه می دهد.
مثال: اتصال مجدد خودکار در SignalR
در سرویس گیرنده جاوا اسکریپت، می توانید با افزودن، اتصالات مجدد خودکار را پیکربندی کنید .withAutomaticReconnect()
به HubConnectionBuilder
.
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.withAutomaticReconnect()
.build();
connection.onreconnecting((error) => {
console.log(`Connection lost: ${error}. Trying to reconnect...`);
});
connection.onreconnected(() => {
console.log("Reconnected to SignalR");
});
این تضمین میکند که در صورت قطع شدن اتصال، برنامه شما تلاش میکند دوباره وصل شود و تجربه کلی کاربر را در هنگام ناپایداری شبکه بهبود میبخشد.
5. ایمن سازی SignalR Hub
امنیت در ارتباطات بلادرنگ بسیار مهم است، بهویژه زمانی که با دادههای حساس سروکار داریم. با پیاده سازی می توانید هاب های SignalR را ایمن کنید احراز هویت و مجوز با استفاده از توکن های JWT یا سایر روش های احراز هویت
مثال: ایمن سازی SignalR با JWT
ابتدا سرور SignalR خود را برای استفاده از احراز هویت JWT پیکربندی کنید:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// Add your token validation logic here
};
});
app.MapHub<ChatHub>("/chathub").RequireAuthorization();
سپس، در سمت مشتری، هنگام اتصال به هاب، توکن JWT را وصل کنید:
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub", { accessTokenFactory: () => localStorage.getItem("jwtToken") })
.build();
این تضمین می کند که فقط کاربران احراز هویت شده می توانند به هاب دسترسی داشته باشند و امنیت ارتباطات بلادرنگ شما را افزایش می دهد.
نتیجه گیری
با ادغام SignalR با حداقل API ها در NET 8، می توانید به راحتی ویژگی های ارتباطی قدرتمند در زمان واقعی را در برنامه خود ایجاد کنید. چه در حال ساختن سیستمهای چت زنده، خدمات اعلان یا داشبوردهای تعاملی باشید، SignalR ارائه بهروزرسانیهای فوری به کاربران را ساده میکند.
در این پست به نحوه انجام موارد زیر پرداختیم:
- با استفاده از SignalR یک سیستم پیام رسانی بلادرنگ راه اندازی کنید.
- یک کلاینت جاوا اسکریپت برای ارتباط با هاب بسازید.
- اعلان های بلادرنگ را برای کاربران پیاده سازی کنید.
- اتصالات مجدد را مدیریت کنید و اطمینان حاصل کنید که سیستم در برابر خطا مقاوم است.
- هاب های SignalR را با احراز هویت ایمن کنید.
ارتباطات بیدرنگ میتواند تجربه کاربر را تا حد زیادی بهبود بخشد، و با حداقل ساختار API و SignalR دات نت 8، شما راهی ساده برای پیادهسازی این عملکرد دارید.