stop/close SignalR 流是否需要 CancelationToken.Cancel()?
Is it necessary to stop/close SignalR stream with CancelationToken.Cancel()?
我担心如何正确 stop/close SignalR 流。它是服务器到客户端的流式传输。
我将尝试解释流媒体的背景。我们有连接到 IP 摄像机并用它打开流的网络服务。在服务的后期,我们对图像(帧)进行生物识别处理,然后将经过生物识别处理的图像流式传输到连接到 SignalR 流的客户端。连接的客户端不多,最多2、3、4个。
所以,我担心的是,如果其中一个客户端想要与流断开连接,它是否需要调用 CancelationToken.Cancel()
或者我们可以让他从服务器上的 while(true)
循环中中断?当该客户端与流断开连接时,流应继续工作,因为其他客户端仍处于连接状态。
关于客户端如何从 while(true)
循环中断的一些简短示例。
public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
while(true)
{
if(client.WantToLeaveStream)
{
break;
}
}
...
或
public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
while(true)
{
if(cancellationToken.IsCancellationRequested)
{
cancellationToken.ThrowIfCancellationRequested();
}
}
...
我浏览了 Microsoft 站点 SignalR stream 上的文档,他们说我们应该使用 CancelationToken
来停止流,但我也尝试通过离开 while(true)
循环和没有什么不好的事情发生,流就停止了。那样行吗? :/
打破循环就好了。该方法是生成流项的方法,或者更具体地说,是向 SignalR 提供流项的方法,因此如果您中断循环,将从 SignalR 的角度停止生成项。文档提到了令牌,因为客户端可以断开连接或取消监听流,并且您的服务器可能希望在这种情况下停止做额外的工作。
我担心如何正确 stop/close SignalR 流。它是服务器到客户端的流式传输。
我将尝试解释流媒体的背景。我们有连接到 IP 摄像机并用它打开流的网络服务。在服务的后期,我们对图像(帧)进行生物识别处理,然后将经过生物识别处理的图像流式传输到连接到 SignalR 流的客户端。连接的客户端不多,最多2、3、4个。
所以,我担心的是,如果其中一个客户端想要与流断开连接,它是否需要调用 CancelationToken.Cancel()
或者我们可以让他从服务器上的 while(true)
循环中中断?当该客户端与流断开连接时,流应继续工作,因为其他客户端仍处于连接状态。
关于客户端如何从 while(true)
循环中断的一些简短示例。
public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
while(true)
{
if(client.WantToLeaveStream)
{
break;
}
}
...
或
public async IAsyncEnumerable<PreviewImage> StartStreamingPreviewImages(string deviceID, [EnumeratorCancellation] CancellationToken cancellationToken)
{
while(true)
{
if(cancellationToken.IsCancellationRequested)
{
cancellationToken.ThrowIfCancellationRequested();
}
}
...
我浏览了 Microsoft 站点 SignalR stream 上的文档,他们说我们应该使用 CancelationToken
来停止流,但我也尝试通过离开 while(true)
循环和没有什么不好的事情发生,流就停止了。那样行吗? :/
打破循环就好了。该方法是生成流项的方法,或者更具体地说,是向 SignalR 提供流项的方法,因此如果您中断循环,将从 SignalR 的角度停止生成项。文档提到了令牌,因为客户端可以断开连接或取消监听流,并且您的服务器可能希望在这种情况下停止做额外的工作。