您是否可以使用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. 零拷貝機制和libpcap
- 2. 如何使用webclient下載js文件
- 3. 使用webclient下載文件
- 4. TCP零拷貝使用提升
- 5. JVM上的零拷貝消息傳遞
- 6. 零拷貝接收和郵件大小
- 7. 如何使用OpenReadAsync和WebClient下載數據並分配給UserToken?
- 8. 有沒有辦法在.NET中執行零拷貝?
- 9. 如何使用OpenCL直接寫入到零拷貝的linux framebuffer?
- 10. 使用WebClient下載C#錯誤
- 11. 使用追加方法的Python淺拷貝和深拷貝
- 12. 淺拷貝和深拷貝在C
- 13. 淺拷貝和深拷貝示例
- 14. AIO網絡套接字和Linux下的零拷貝
- 15. 列拷貝和
- 16. webclient下載文件,但沒有執行完成
- 17. 通過WCF和WebClient下載圖片
- 18. 下載多個文件WebClient
- 19. 下載AsyncData的WebClient失敗
- 20. 懶惰的WebClient下載
- 21. CmisInvalidArgumentException當通過CMIS從Alfresco下載私人工作拷貝時
- 22. 如何從下面的下一行拷貝數值
- 23. 如何使用WebClient下載許多圖像異步?
- 24. 如何使用WebClient類下載大視頻文件
- 25. 如何使用WebClient下載PHP腳本生成的XML內容?
- 26. 如何使用webclient在c#中下載文件?
- 27. C#Webclient在Json文件中下載字符串零結果
- 28. 如何在無拷貝的獨特載體中轉移小載體集合
- 29. 使用WebClient進行文件下載時UI凍結
- 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