gpt4 book ai didi

dart - 高效地将图像文件流式传输到 HttpResponse

转载 作者:行者123 更新时间:2023-12-03 02:51:38 25 4
gpt4 key购买 nike

我的服务器端 Dart Web 应用程序为某些请求提供图像文件。

简单来说,它目前的作用如下:

   HttpServer.bind(InternetAddress.ANY_IP_V4, 80)
.then((HttpServer server) {
server.listen((HttpRequest request) {
request.response.statusCode = HttpStatus.OK;
request.response.headers.contentType = ContentType.parse("image/jpg");
var file = new File("C:\\images\\myImage.jpg");
file.readAsBytes().then((List<int> bytes) {
bytes.forEach((int b) => request.response.writeCharCode(b)); // slow!
request.response.close();
});
}
}

这可行,但速度相当慢,我怀疑通过 HttpResponse.writeCharCode 单独写入每个字节是这里减慢速度的原因。

不幸的是,HttpResponse 上没有 .writeAllCharCodes 这样的东西。 。有writeAll ,但它对字节数组的每个元素调用 toString() - 我们需要写入原始字节。

有什么建议吗?

最佳答案

我认为这可能对您有帮助 - 我的速度提高了大约 4-5 倍:

我将在此处添加完整的示例:

Future<ServerSocket> future = ServerSocket.bind("127.0.0.1", 1000);
future.then((ServerSocket sock) {
HttpServer s = new HttpServer.listenOn(sock);

s.listen((HttpRequest req) {
req.response.statusCode = HttpStatus.OK;
req.response.headers.contentType = ContentType.parse("image/png");
var file = new File("someImage.png");

// Average of about 5-7ms
Future f = file.readAsBytes();
req.response.addStream(f.asStream()).whenComplete(() {
req.response.close();
});
// Average of ~25-30ms
/*
file.readAsBytes().then((List<int> bytes) {
bytes.forEach((int b) => req.response.writeCharCode(b)); // slow!
req.response.close();
});
*/
});
});

这能解决您的问题吗?

问候罗伯特

关于dart - 高效地将图像文件流式传输到 HttpResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23318528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com