gpt4 book ai didi

dart vm 从 isolate 发回流

转载 作者:行者123 更新时间:2023-12-01 17:56:47 27 4
gpt4 key购买 nike

关于在 dart2js 中处理流有类似的问题 ( how to process a HTTP stream with Dart )。我专注于虚拟机。

我可以从规范中读到:

The content of message can be: primitive values (null, num, bool, double, String), instances of SendPort, and lists and maps whose elements are any of these. List and maps are also allowed to be cyclic.

In the special circumstances when two isolates share the same code and are running in the same process (e.g. isolates created via spawn), it is also possible to send object instances (which would be copied in the process). This is currently only supported by the dartvm. For now, the dart2js compiler only supports the restricted messages described above.

我了解到我无法发送到隔离对象并返回以下对象:HttpRequest 和 HttpResponse 对象,我无法发送流。

问:我真的不明白我应该如何在 isolate 中处理大块数据,然后将其发送回主 isolate,然后再将其发送回客户端。

通常如果我想读取一个文件。我可以获得流,应用转换,然后将流通过管道传输到 http 响应。使用 isolate 执行此操作的最佳做​​法是什么?

感谢您的帮助!

最佳答案

我已经提供了一个示例,但我将简要概述如何实现这一目标,尽管它不一定是最佳实践 - 这只是我个人知道的唯一方法。

我们得到了一个名为 Isolate.spawnUri(Uri uri, List<String> args, dynamic message) 的方法

message参数可以包含您在第一篇文章中提到的摘录中的任何值。我们要做的是在主线程中创建一个新的 ReceivePort并监听传入的数据,然后我们想用 message 生成一个隔离作为 ReceivePorts .sendPort .

然后 isolate 应该创建自己的 ReceivePort并使用消息值发回它自己的发送端口并监听它的接收端口。这实质上所做的是创建一种双向通信。允许我们保持隔离状态并来回发送工作。

来自您的 isolate 的任何响应都将通过您的原始接收端口,您想要发送到 isolate 的任何数据都将通过 isolate 刚刚发回的发送端口。

然后您可以直接将流数据发送到 isolate 以供其随意处理,它可以按原样发送回数据(或者您可以在 isolate 发送响应后关闭端口 - 由您决定去做吧)。

我在 GitHub 上提供了一个例子: https://github.com/TomCaserta/ExampleIsolate

请注意,如果您希望您的 isolate 在 dart2js 中工作,请务必通过以下命令在每个 isolate 文件上运行 dart2js:

dart2js -o <filename>.dart.js <filename>.dart

关于dart vm 从 isolate 发回流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053623/

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