Events 如何通过websocket向客户端发送事件火灾数据

Events 如何通过websocket向客户端发送事件火灾数据,events,asp.net-core,websocket,Events,Asp.net Core,Websocket,几天前我遇到了一个我似乎无法解决的问题。这就是为什么我把它贴在StackOverflow上 我正在运行一个.NET核心网站,可以在后台运行任务。此类任务有3个事件(未完成、已启动、任务进度)。我需要的是,如果这些事件发生,他将向连接的客户端发送数据。为简单起见,我想返回“事件触发”字符串 我目前所做的工作如下: 将app.UseWebSockets()添加到我的startup.cs文件中 在管道中添加了一个新函数以捕获websocket调用 app.Use(async (context, ne

几天前我遇到了一个我似乎无法解决的问题。这就是为什么我把它贴在StackOverflow上

我正在运行一个.NET核心网站,可以在后台运行任务。此类任务有3个事件(未完成、已启动、任务进度)。我需要的是,如果这些事件发生,他将向连接的客户端发送数据。为简单起见,我想返回“事件触发”字符串

我目前所做的工作如下:

  • app.UseWebSockets()
    添加到我的startup.cs文件中
  • 在管道中添加了一个新函数以捕获websocket调用

    app.Use(async (context, next) =>
    {
        if (context.Request.Path == "/socket")
        {
            if (context.WebSockets.IsWebSocketRequest)
            {
                var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                //HERE IS MY PROBLEM
            }
            else
            {
                context.Response.StatusCode = 400;
            }
        }
        else
        {
            await next();
        }
    });
    
  • 我创建了一个
    SocketListener
    类,它在触发时接收所有3个事件

    private void _taskManager_TaskExecuting(object sender, GenericEventArgs<IScheduledTaskWorker> e)
    {
        SendData();
    }
    
    private void _taskManager_TaskCompleted(object sender, TaskCompletionEventArgs e)
    {
        SendData();
    }
    
    private void Argument_TaskProgress(object sender, GenericEventArgs<double> e)
    {
        SendData();
    }
    
    private void\u taskManager\u TaskExecuting(对象发送方,GenericEventArgs e)
    {
    SendData();
    }
    私有void\u taskManager\u TaskCompleted(对象发送方,TaskCompletionEventArgs e)
    {
    SendData();
    }
    私有无效参数\u TaskProgress(对象发送方,GenericEventArgs e)
    {
    SendData();
    }
    
所以我现在需要的是,在管道函数中(//这是我的问题行),我不知何故等待无限的时间来触发任何事件。如果它们触发,
SocketListener
类需要知道这些连接,并通过WebSocket连接将数据发送回

“SendData()”函数需要检查打开的连接,并向所有连接发送“事件触发”字符串

离开页面导航时,还需要关闭连接。我想我可以通过一些angular NavigationStart事件来管理它,然后用关闭消息调用socket api

我在互联网上搜索了一个很好的解决方案,但是大部分的blogpost/tutorials/。。。正在谈论双向通信(聊天程序等)

有人知道我如何解决这个问题吗?如果需要更多信息,我会告诉我

提前谢谢

Helo Reggi

我已经开源了一个WebSocket应用程序,它是我在.NETCore中构建的

我构建它是为了处理一般消息,而不仅仅是关注聊天

我的想法是在客户端(网页)和websocket中使用双向通信来执行任何类型的任务

WebSocket通信的工作原理与您在回答问题时所说的略有不同,但我编写的代码将是一个很好的指南

您希望对SendData执行的操作类似于我创建的控制器NotificationController上的“NotifyAllConnectedSockets”方法

请看一下它是否符合你的要求

后端-

前端-

注:这是一个工作在progres,无论是前端和后端

请随便问任何问题


向您致意

您对WebSocketConnectionManager的想法是一个非常好的想法!我会尝试一下你的代码!Í只是想提醒你,如果你认为我的答案合适,就投票支持我。谢谢你,请随意提问。如果你知道答案的话,把答案贴在这里(至少是概念)会很好solution@MehdiDehghani你看过GtiHub回购协议了吗?你不觉得我给出的答案不够吗?提前谢谢。@AlanSilva实际上我用另一种方法解决了问题,是的,我检查了repo,分享完整的源代码很好,但我认为分享与问题相关的主要部分很好,因此读者可以决定是否继续阅读完整的源代码(完整的源代码是否与问题相关),祝你好运