我使用角度构建了一个 SPA,并在 signalR 中遇到了消息大小的问题,但在增加并将问题移到后面之前,我想用流来拆分消息。
这很简单:
const subject = new Subject<any>();
try
{
await this.hubConn.send("Values", id, subject) // X
.catch(err => console.error(err));
for (let i = 0; i < values.length; ++i)
subject.next(values[i]);
subject.complete();
}
catch (err: any)
{
subject.error('Error');
console.error(err.message);
}
经过一番调查后,我发现在第二次迭代中streamId
是distinct
:
我建立了一个小例子来检查发生了什么:
var streams = [];
streams[4] = {};
for (const streamId in streams)
console.debug(streamId);
这给了我这个结果:
4
distinct
equals
firstOrDefault
lastOrDefault
pushSorted
但这意味着对键进行迭代总是对数组函数进行迭代,但我没有发现有关此问题的任何信息......
我正在使用:
angular 16.2
typescript 5.1.6
signalR 7.0.9 and 8.0.7 (tried both)
nodejs 16.20.2
and I have the target ES2022
所以要么是没有人尝试过流式传输(这听起来不太可能),要么是我的版本不兼容,要么是我的代码中存在一些我看不到的错误......
有谁知道为什么这可能行不通吗?
// 编辑:这里是接收值的服务器端方法:
[HubMethodName(nameof(Values))]
public async Task Values(string id, IAsyncEnumerable<object> values)
{
try
{
object[] result = null;
if (values != null)
result = await values.ToArrayAsync();
Debug.WriteLine(result);
}
catch (Exception ex)
{
SystemLogger.LogCritical("{ex}", ex);
}
}