您是否可以使用org.springframework.web.reactive.function.client.WebClient
與Spring 5 WebFlux執行零拷貝上載和下載?如何使用WebClient執行零拷貝上載和下載?
0
A
回答
1
你是對的,當發佈基於文件的Resource
的數據時,現在支持零拷貝。
所以下面的期待權:
client.post()
.body(BodyInserters.fromResource(new FileSystemResource(new File("file.txt"))));
現在的閱讀部分,零拷貝並不在Spring框架支持上的讀數一側現在;你可以在jira.spring.io上創建一個增強問題。
您的代碼示例應該像:
Flux<DataBuffer> incoming = client.post()
.retrieve().bodyToMono(DataBuffer.class);
Mono<Void> writeOperation = DataBufferUtils.write(incoming, channel)
.map(DataBufferUtils::release)
.then();
// subscribe to the returned value, which will complete when writing is done
不幸的是,讀取數據到DataBuffer
不會做零拷貝數據將在內存中複製。我不認爲零拷貝在讀取方面是支持的,所以這可能是對https://jira.spring.io的增強請求。
+0
它緩衝整個響應嗎?不緩衝導致塊? 'DataBufferUtils.write(發佈者
+0
整個響應沒有被緩衝,它被寫入,因爲反應流水線要求請求。 –
相關問題
- 1. Linux零拷貝
- 2. 零拷貝機制和libpcap
- 3. 如何使用webclient下載js文件
- 4. 使用webclient下載文件
- 5. 並行拷貝和opencl內核執行
- 6. 使用WebClient登錄和下載文件
- 7. 零拷貝在Linux中使用vmsplice/splice
- 8. TCP零拷貝使用提升
- 9. JVM上的零拷貝消息傳遞
- 10. 零拷貝接收函數
- 11. 如何使用OpenReadAsync和WebClient下載數據並分配給UserToken?
- 12. 零拷貝接收和郵件大小
- 13. 有沒有辦法在.NET中執行零拷貝?
- 14. Webclient用ClientCertificate下載文件
- 15. 如何使用OpenCL直接寫入到零拷貝的linux framebuffer?
- 16. 使用PowerShell無WebClient下載XML
- 17. 使用asp.net webclient自動從codeplex.com下載
- 18. 使用WebClient下載C#錯誤
- 19. 下載圖像使用webclient不工作
- 20. 使用追加方法的Python淺拷貝和深拷貝
- 21. 淺拷貝和深拷貝在C
- 22. 淺拷貝和深拷貝示例
- 23. Netty的零拷貝是否與操作系統級零拷貝不同?
- 24. AIO網絡套接字和Linux下的零拷貝
- 25. 使用CUDA的GPU設備和零拷貝固定內存
- 26. 拷貝載體的價值觀爲char *
- 27. three.js拷貝網格加載對象JavaScript
- 28. 列拷貝和
- 29. 如何使用Selenium和Firefox自動下載可執行文件?
- 30. webclient下載文件,但沒有執行完成
基於'BodyInserters.fromResource'的文檔,聽起來像下面的代碼將執行零拷貝上傳:'client.post()。body(BodyInserters.fromResource(new FileSystemResource(new File(「file.txt 「))))'。這是否準確?下載怎麼樣? – CoryO
只能假設通過以下方式實現零拷貝下載:'client.post()。exchange()。doOnNext(r - > DataBufferUtils.write(r.body(BodyExtractors.toDataBuffers()),channel,0).subscribe (DataBufferUtils.releaseConsumer()))'。但是,我怎麼能阻止,直到它完成消費?這甚至會執行零拷貝下載? – CoryO