几天前,我遇到了一些我似乎无法解决的问题。这就是我将其发布在StackOverflow上的原因。
我正在运行可以在后台运行任务的.NET CORE网站。这样的任务有3个事件(OnCompleted,OnStarted,TaskProgress)。我需要的是,如果这些事件中的任何一个触发,他将向连接的客户端发送数据。为简单起见,我想返回"事件被触发"字符串。
我目前所做的是以下内容:
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();
}
所以我现在需要的是在管道功能(//这里是我的问题行)中,我不知何故等待无限时间触发任何事件。如果它们触发,SocketListener
类需要知道连接并通过WebSocket连接发回数据。
`SendData()&#39;函数将需要检查打开的连接并发送&#34;事件被触发&#34;字符串给所有人。
导航离开页面时也需要关闭连接。我想我可以使用一些有角度的NavigationStart事件来管理它,然后用一个关闭的消息调用socket api。
我在互联网上搜索了一个很好的解决方案,但大多数博文/教程/ ...都在谈论双向沟通(聊天程序,...)
任何人都知道如何解决这个问题?如果需要更多信息,请告诉我。
提前致谢!
答案 0 :(得分:0)
Helo Reggi,
我已经开源了一个我在.NET Core中构建的WebSocket应用程序。
我已将其构建为处理通用消息,而不仅仅是专注于聊天。
我的想法是在客户端(WebPage)和websocket中使用双向通信来执行任何类型的任务。
WebSocket通信与您在问题上的说法略有不同,但我编写的代码将是一个很好的指南。
您想要使用SendData做的事情就像我创建的控制器NotificationController上的'NotifyAllConnectedSockets'方法一样。
请看一下它是否适合你想要的东西。
BackEnd - https://github.com/asiilva/WSMessageHandler
前端 - https://github.com/asiilva/ws-message-handler-front
注意:这是一项前进和后端的工作。
随意提出任何问题
最好的问候