gpt4 book ai didi

signalr - 如何在服务器端限制 SignalR 客户端

转载 作者:行者123 更新时间:2023-12-04 04:51:41 24 4
gpt4 key购买 nike

我正在使用 PersistentConnection 向连接的客户端发布大量数据(许多小包)。

它基本上是一种单向的数据方向(因为每个客户端都会调用其他服务器上的端点来设置各种订阅,因此它们不会通过 SignalR 连接将任何数据推送回服务器)。

有没有办法检测客户端跟不上发送给它的消息?

该示例可能是连接不良的移动客户端(例如,在漫游情况下,速度可能会有很大差异)。如果我们每秒发送 100 条消息,而客户端只能处理 10 条,我们最终会丢失这些消息(由于服务器端的消息缓冲区)。

我正在寻找一个服务器端事件,类似于在(SignalR)客户端上所做的事情,例如

protected override Task OnConnectionSlow(IRequest request, string connectionId) {}

但这不是框架的一部分(我假设有充分的理由)。

我已经考虑使用这种方法(在 Stackoverflow 的其他地方建议),让客户端告诉服务器(例如每 10-30 秒)它收到了多少消息,以及该数字是否与发送到客户,很可能客户跟不上。

该事件将用于告诉分布式后端客户端跟不上,然后调低数据生成速率。

最佳答案

除了编写自定义的代码之外,现在没有其他方法可以做到这一点。我们过去曾将其作为一项潜在功能进行过讨论,但现在它不在路线图的任何地方。也不清楚“慢”是什么意思,因为这取决于应用程序来决定。可能存在某种基于带宽/时间/消息的设置,可以触发此假设事件。

如果你想在一个非常低的级别挂入,你可以使用 owin 中间件将客户端的底层流替换为你拥有的流,这样你就可以看到所有数据通过写入(你必须执行虽然对于 websockets 也是如此,但这可能不是微不足道的)。

一旦你有了它,你就可以编写一些基于时间的逻辑来确定刷新是否花费了太长时间并以这种方式杀死客户端。

这非常模糊,但它基本上是关于这样的功能如何工作的大脑转储。

关于signalr - 如何在服务器端限制 SignalR 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com