Я предлагаю вам взглянуть на Сигнал R
Прочтите документацию, и тогда у вас будет четкое представление. Он соответствует вашим требованиям.
EDIT :
SignalR - это библиотека, которая упрощает добавление веб-функций в реальном времени в приложения. Чтобы использовать SignalR, вам необходимо настроить серверную часть и клиентскую часть. Каждая часть может отправлять «сообщения» на другую сторону.
SignalR использует концентраторы для связи между клиентами и серверами.
Концентратор - это высокоуровневый конвейер, который позволяет клиенту и серверу вызыватьметоды друг на друга.
Вы можете подключить множество клиентов к одному и тому же концентратору и получать одно и то же уведомление одновременно.
Таким образом, вы можете отправить сообщение "загрузка завершена" клиенту, который также содержит URL-адрес загрузки.
Источник примера здесь .
Вот пример концентратора:
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("downloadComplete", user, message);
}
}
}
Ваш Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
// ...
endpoints.MapHub<ChatHub>("/chatHub");
});
}
вот пример в JS-клиенте, где вы создаете че соединение со стороной сервера SignalR через хаб. Здесь вы можете обрабатывать входящие сообщения:
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("downloadComplete", function (user, message) {
// do something
});