SignalR
当我将大块字节从客户端通过服务器传输到客户端(或客户端到服务器;或服务器到客户端)时,会丢失许多消息。
我将文件读入流中并通过集线器或持久连接将其发送到其他客户端。这运行得非常快,但总是有消息丢失或丢失。
如何在不丢失消息的情况下从客户端传输大文件(无论是否以块的形式)?
正如@dfowler 指出的那样,这不是适合这项工作的技术。我建议做的是发送一条消息,说明有一个包含链接的文件要下载,然后您可以使用标准 GET 请求针对静态文件或使用 ASP.NET WebAPI 编写的某些 Web 服务下载该文件。
SignalR 不是用于文件传输,而是用于发送消息。
为什么它不是正确的技术?如果客户端需要向 signalR 集线器发送一些数据,它应该能够通过 signalR 连接而不需要额外的东西。
事实上,发送字节数组时它工作得很好,至少对我来说是这样,但是我在传输块时遇到了类似的问题。
也许您可以做一些测试来检查您发送块的顺序是否与接收它们的顺序相同。
更新
我自己做了一个测试,就我而言,顺序确实是问题所在。修改了接收块的集线器方法以接受一个订单参数,然后我用它在最后重建字节数组,它工作正常。话虽如此,但我现在明白这不适用于大文件传输。
在我的情况下,我不需要传输大量数据,我只是想给我的 UI 一个进度指示,要求数据以块的形式发送。