作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 PersistentConnection 向连接的客户端发布大量数据(许多小包)。
它基本上是一种单向的数据方向(因为每个客户端都会调用其他服务器上的端点来设置各种订阅,因此它们不会通过 SignalR 连接将任何数据推送回服务器)。
有没有办法检测客户端跟不上发送给它的消息?
该示例可能是连接不良的移动客户端(例如,在漫游情况下,速度可能会有很大差异)。如果我们每秒发送 100 条消息,而客户端只能处理 10 条,我们最终会丢失这些消息(由于服务器端的消息缓冲区)。
我正在寻找一个服务器端事件,类似于在(SignalR)客户端上所做的事情,例如
protected override Task OnConnectionSlow(IRequest request, string connectionId) {}
最佳答案
除了编写自定义的代码之外,现在没有其他方法可以做到这一点。我们过去曾将其作为一项潜在功能进行过讨论,但现在它不在路线图的任何地方。也不清楚“慢”是什么意思,因为这取决于应用程序来决定。可能存在某种基于带宽/时间/消息的设置,可以触发此假设事件。
如果你想在一个非常低的级别挂入,你可以使用 owin 中间件将客户端的底层流替换为你拥有的流,这样你就可以看到所有数据通过写入(你必须执行虽然对于 websockets 也是如此,但这可能不是微不足道的)。
一旦你有了它,你就可以编写一些基于时间的逻辑来确定刷新是否花费了太长时间并以这种方式杀死客户端。
这非常模糊,但它基本上是关于这样的功能如何工作的大脑转储。
关于signalr - 如何在服务器端限制 SignalR 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338227/
我是一名优秀的程序员,十分优秀!