SignalR - 从服务器端业务逻辑访问客户端
SignalR - access clients from server-side business logic
我需要在服务器上启动一个可能 运行 几分钟的进程,所以我想公开以下集线器方法:-
public async Task Start()
{
await Task.Run(() => _myService.Start());
}
还有一个 Stop()
方法允许客户端停止 运行ning 进程,可能是通过取消令牌。如果已经 运行ning、错误处理等,我还省略了阻止它启动的代码
此外,long-运行ning 进程将收集需要定期广播回客户端的数据,所以我想知道是否使用事件 - 像这样:-
public async Task Start()
{
_myService.AfterDataCollected += AfterDataCollectedHandler;
await Task.Run(() => _myService.Start());
_myService.AfterDataCollected -= AfterDataCollectedHandler;
}
private void AfterDataCollectedHandler(object sender, MyDataEventArgs e)
{
Clients.All.SendData(e.Data);
}
这是可以接受的解决方案还是有 "better" 方法?
您不需要使用 SignalR 来开始工作,您可以为此使用已经存在的框架/设计/API 的应用程序,并且仅将 SignalR 用于发布子部分。
我为我当前的客户项目做了这个,一个用户开始工作,属于该用户的所有选项卡都使用 signalr 更新,我使用一个名为 SignalR.EventAggregatorProxy 的 out sun 库从 SignalR 中抽象域。免责声明:我是上述图书馆的作者
http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/
编辑:使用 .NET 客户端,您的代码将如下所示
public class MyViewModel : IHandle<WorkProgress>
{
public MyViewModel(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(WorkProgress message)
{
//Act on work progress
}
}
我需要在服务器上启动一个可能 运行 几分钟的进程,所以我想公开以下集线器方法:-
public async Task Start()
{
await Task.Run(() => _myService.Start());
}
还有一个 Stop()
方法允许客户端停止 运行ning 进程,可能是通过取消令牌。如果已经 运行ning、错误处理等,我还省略了阻止它启动的代码
此外,long-运行ning 进程将收集需要定期广播回客户端的数据,所以我想知道是否使用事件 - 像这样:-
public async Task Start()
{
_myService.AfterDataCollected += AfterDataCollectedHandler;
await Task.Run(() => _myService.Start());
_myService.AfterDataCollected -= AfterDataCollectedHandler;
}
private void AfterDataCollectedHandler(object sender, MyDataEventArgs e)
{
Clients.All.SendData(e.Data);
}
这是可以接受的解决方案还是有 "better" 方法?
您不需要使用 SignalR 来开始工作,您可以为此使用已经存在的框架/设计/API 的应用程序,并且仅将 SignalR 用于发布子部分。
我为我当前的客户项目做了这个,一个用户开始工作,属于该用户的所有选项卡都使用 signalr 更新,我使用一个名为 SignalR.EventAggregatorProxy 的 out sun 库从 SignalR 中抽象域。免责声明:我是上述图书馆的作者
http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/
编辑:使用 .NET 客户端,您的代码将如下所示
public class MyViewModel : IHandle<WorkProgress>
{
public MyViewModel(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(WorkProgress message)
{
//Act on work progress
}
}