【问题标题】:How to ensure events don't get lost when using SignalR使用 SignalR 时如何确保事件不会丢失
【发布时间】:2020-08-04 19:07:53
【问题描述】:

我正在使用 SignarR 作为销售主管仪表板。仪表板向主管显示哪个销售人员正在通话,并允许他对此进行处理。这将由大约 100 名销售人员和 10 名不同的主管组成。

后端是AspnetCore 3.1,前端是通常的html/javascript。

总的来说,SignalR 运行良好。简而言之,CSR 采取的不同操作(例如开始呼叫)被触发到集线器,然后广播给相关的主管。所有这些工作都很好 - 大部分时间

问题是有时会丢失事件。例如,服务器永远不会收到开始通话的事件,因此看起来销售员没有在通话,而实际上他们正在通话。

或者有时 Call End 事件不会触发,然后看起来他们正在通话,而实际上他们不在通话中。这种情况只发生在 2-3% 的时间内,但足以引起问题。

因此,我正在寻找方法来提高事件的准确性,以使其达到 100%。我有两个想法:

  1. 服务器收到事件后,将“确认”发送回客户端。然后,在客户端,如果它没有收到确认,则再次触发事件。

  2. 向服务器发送“流”事件。因此,例如,如果用户拨打电话,则将该事件发送到服务器。然后继续向服务器发送相同的事件,直到电话结束。然后重复发送 HungUp 事件,直到某个新事件发生。

或者 SignalR 是否应该能够 100% 获得事件?

任何建议将不胜感激。我已经搜索过,我只能找到关于我现在添加的“withAutomaticReconnect”功能。

【问题讨论】:

  • 你在使用 Azure SignalR 吗?并且你使用像 redis 这样的缓存吗?
  • @Kiril1512,我没有使用 Azure SignalR 服务,也没有使用缓存。我熟悉 Azure SignalR,但不使用缓存。

标签: signalr asp.net-core-signalr


【解决方案1】:

我还没有得到任何回应,所以我要说明我所做的到目前为止似乎有效。

  1. 连接时设置“withAutoReconnect()”。

  2. 实现了往返确认。因此,在服务器接收到事件后,它会将确认推送回发送客户端。如果客户端在两秒内没有得到这个,那么它会重新发布这个事件。

到目前为止,一切都很好。烤了一会儿我会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2021-12-27
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多