c# - SignalR 从服务器流式传输到客户端
问题描述
我无法让我的服务器使用 SignalR 将数据流式传输到客户端。流只获得 1 个值,在这种情况下为 0,然后回退到 javascript 完成回调方法。需要一些帮助来弄清楚为什么它不起作用。下面是 Hub 代码和 JS 代码:
public class ChatHub : Hub
{
private Channel<double> channel = Channel.CreateUnbounded<double>();
public async IAsyncEnumerable<double> GetData(CancellationToken cancellationToken)
{
while (await channel.Reader.WaitToReadAsync())
{
while (channel.Reader.TryRead(out var item))
{
yield return item;
}
}
}
public async Task PublishData(IAsyncEnumerable<double> data)
{
await foreach (var point in data)
{
await channel.Writer.WriteAsync(point);
}
}
}
JS:
(async () => {
const latestNumber = 0;
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chatHub")
.build();
await connection.start();
connection.stream("GetData")
.subscribe({
next: (item) => {
var li = document.createElement("li");
li.textContent = item;
document.getElementById("messagesList").appendChild(li);
},
complete: () => {
var li = document.createElement("li");
li.textContent = "Stream completed";
document.getElementById("messagesList").appendChild(li);
},
error: (err) => {
var li = document.createElement("li");
li.textContent = err;
document.getElementById("messagesList").appendChild(li);
},
});
console.log(latestNumber);
})();
解决方案
我找到了答案,制作了一个服务类单例并将频道添加到其中。然后我从集线器调用了单例类,所以我在服务器和客户端之间获得了相同的通道实例。
推荐阅读
- xml - 如何解析 XML 代码并获取所需的属性和值
- rest - 401/405 错误 Symfony 4 REST:Docker 上的 JWT API 身份验证(LexikJWTAuthenticationBundle)-ngnix
- c++ - 从有符号字符到整数的值初始化,过早提升?
- ios - 以无线方式将 ARSCNView 从 iOS 共享到 macOS 上的 SCNView
- augmented-reality - 从 AR 应用程序 (WebXR) 检测房间中的真实物体
- javascript - 为什么 JSON.parse 调用后整数值发生变化
- r - 将数据类型转换为因子
- wpf - 如何将 F# 中 xplot.plotly 生成的图形绑定到 WPF
- ruby-on-rails - 更新关联记录时销毁has_many关系变空
- mysql - 将 mysql DB 空模式转换为 sqlite DB 模式