c# - 使用一个连接发送并发 SignalR 消息

标签 c# angular asp.net-core signalr

如何仅通过一个连接并行发送多条 SignalR 消息?

我有以下集线器方法:

public async Task Test()  
{  
    Console.WriteLine($"Start: {DateTime.Now}");  
    await Task.Run(() => Task.Delay(1000));  
    Console.WriteLine($"Stop: {DateTime.Now}");  
} 

在我的客户端中,我有以下连接:

private connection: HubConnection = new HubConnectionBuilder()
  .withUrl(this.url)
  .configureLogging(LogLevel.Information)
  .withAutomaticReconnect([1000, 2000, 3000, 4000, 5000])
  .build();

我这样调用集线器方法:

async test(): Promise<void> {
  try {
    console.log('start: ' + new Date().toString());
    await this.connection.invoke('Test');
    console.log('stop: ' + new Date().toString());
  } catch (err) {
    console.error(err);
  }
}

当我多次调用客户端中的测试方法时,集线器会一个接一个地接收消息,而不是一次接收所有消息。

客户端日志:

start: Mon Nov 29 2021 17:27:35 GMT+0100 (3)
stop: Mon Nov 29 2021 17:27:36 GMT+0100
stop: Mon Nov 29 2021 17:27:37 GMT+0100
stop: Mon Nov 29 2021 17:27:38 GMT+0100

服务器日志:

Start: 29.11.2021 17:27:35
Stop: 29.11.2021 17:27:36
Start: 29.11.2021 17:27:36
Stop: 29.11.2021 17:27:37
Start: 29.11.2021 17:27:37
Stop: 29.11.2021 17:27:38

最佳答案

为了允许每个客户端进行多个并行调用,您需要设置 MaximumParallelInvocationsPerClient属性(property),像这样:

builder.Services.AddSignalR(options => options.MaximumParallelInvocationsPerClient = 10);

关于c# - 使用一个连接发送并发 SignalR 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70157999/

相关文章:

c# - 如何在 Windows 应用商店 XAML/C# 应用程序中播放音频剪辑

c# - 赋值兼容性、逆变和隐式类型转换

javascript - Angular 渲染在组件中动态附加 &lt;script&gt;-标签

c# - 具有共享 DbContext 的简单注入(inject)器的 ASP.NET Core DI

HttpPost 操作中的 ASP.Net Core CreatedAtAction 返回 201,但整个请求以 500 结束

c# - Entity Framework 中的多对多关系有效

c# - 为什么我在 Datagrid 中已经有了 Columnheader?

css - 如何在 Angular 2 中将 SASS 用于组件样式?

随着时间的推移,Angular 4 变得越来越慢

asp.net-core - ASP.NET 5 : Error with Nuget package in Class library Package