我正在使用PersistentConnection将大量数据(许多小包)发布到连接的客户端。
它基本上是数据的单向方向(因为每个客户端将调用其他服务器上的端点来设置各种订阅,因此它们不会通过SignalR连接将任何数据推送回服务器)。
有没有办法检测到客户端无法跟上发送给它的消息?
该示例可能是连接不良的移动客户端(例如,在漫游情况下,速度可能变化很大)。如果我们每秒发送100条消息,但客户端只能处理10条消息,我们最终将丢失消息(由于服务器端的消息缓冲区)。
我正在寻找服务器端事件,类似于(SignalR)客户端上所做的事情,例如
protected override Task OnConnectionSlow(IRequest request, string connectionId) {}
但这不是框架的一部分(出于好的理由,我假设)。
我已经考虑过使用这种方法(在Stackoverflow上的其他地方建议),让客户端告诉服务器(例如每10-30秒)收到多少消息,以及该数字是否与消息数量有所区别发送给客户,很可能客户无法跟上。
该事件将用于告知分布式后端客户端无法跟上,然后调低数据生成速率。
答案 0 :(得分:1)
除了编写自定义内容之外,现在没有办法实现此目的。我们过去曾将此作为一个潜在的功能进行了讨论,但现在并不是路线图的任何地方。还不清楚“缓慢”意味着什么,因为它取决于应用程序的决定。可能存在某种基于带宽/时间/消息的设置会使该假设事件触发。
如果你想以非常低的水平挂钩,你可以使用owin中间件将客户端的基础流替换为你拥有的一个,这样你就可以看到所有数据都在写入(你有为websockets做同样的事情,这可能是非常重要的)。
一旦你有了这个,你可以编写一些基于时间的逻辑,确定刷新是否花费太长时间并以这种方式杀死客户端。
这非常模糊,但它基本上是一个像这样的功能如何工作的大脑转储。