2

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

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

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

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

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

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

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

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

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

4

1 回答 1

3

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

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

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

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

于 2013-06-27T08:32:09.087 回答