【问题标题】:AspNetCore SignalR Streaming ClarificationsAspNetCore SignalR 流式澄清
【发布时间】:2018-10-03 20:42:11
【问题描述】:
我浏览了最近的 signalr 文档,偶然发现了名为 Streaming 的新功能。我也是,并且我设法让它与 JS 客户端一起运行。但是,我仍然不清楚何时使用它。
1- ChannelReader 是否将数据流式传输到单个客户端?
2- 如果是,与调用this.Clients.Caller.Invoke() 有什么区别
3- 假设我正在收听外部实时提要,例如证券交易所,推荐使用信号流吗?
4- 根据this post,作者住在Task.Run()。那么,如果我需要使用流向 1000 个客户推送实时提要,这如何扩展?通常使用信号流是否存在任何可扩展性问题?
【问题讨论】:
标签:
asp.net-core
signalr
streaming
system.threading.channels
【解决方案1】:
1- ChannelReader 是否将数据流式传输到单个客户端?
是的。
2- 如果是,那么与执行 this.Clients.Caller.Invoke() 有什么区别
您一次只能调用一个方法(按顺序)。只要您在调用中,其余的将排队等待该连接,直到前一个连接完成。使用流方法,您可以启动流并将数据泵送到客户端,同时仍然在同一个集线器上调用其他方法。
3- 假设我正在收听外部实时提要,例如证券交易所,推荐使用信号流吗?
流用于从客户端操作触发的流式传输数据。您仍然可以通过调用 IHubContext 上的方法来进行未经请求的(不是来自客户端的)流式传输。
4- 根据这篇文章,作者生活在 Task.Run() 中。那么,如果我需要使用流向 1000 个客户推送实时提要,这如何扩展?通常使用信号流是否存在任何可扩展性问题?
它可以很好地扩展。 Task.Run 启动 Stream,但您永远不会持有线程人质。