我正在尝试使用 dart(flutter) 客户端和带有 gRPC api 的 python 服务器进行实时图像分析。如何在 gRPC 中使用 dart-client 设置异步图像流?(如 websockets)
问问题
1530 次
2 回答
1
这是一个相当大的话题,但你要求一个 dart 客户端,所以我假设你有一个看起来像这样的“ .proto ”文件和一个工作的 python-server。
如果你想将你的 dart-client 连接到一个异步流,你必须这样做。
typedef FrameStreameCallback = Function(Frame);
ResponseStream<Frame> _frameStream;
void getFrames(FrameStreameCallback cb) {
FrameRequest req = new FrameRequest();
//Set data of req and so on...
_frameStream = _stub.FrameStreamer(req);
_frameStream.listen((Frame newFrame) {
//Send callback when a new Frame is received
cb(newFrame);
});
_messageStream.handleError((onError) {
print("An error occured in frame stream " + onError);
});
}
然后你这样调用这个方法:
obj.getFrames((Frame f){
print("New Frame received" + f.toString());
});
于 2019-08-14T13:03:05.350 回答
1
你的问题范围太大了。您必须决定要流式传输的内容,您是否尝试流式传输一个图像帧?请记住,如果您希望每条消息发送超过 1MB,gRPC 提倡重新设计您的系统或使用其他东西。
我不熟悉 dart,但假设您需要将图像流式传输到运行 dart 的客户端,您可以让客户端向 python 服务器发送请求,然后让 python 服务器将帧流回。原型可能如下所示:
service FrameService {
rpc FrameStreamer(FrameRequest) returns (stream Frame) {}
}
message FrameRequest {
//empty
}
message Frame {
//put your data in here, perhaps bytes?
//or an frame id, etc.
}
于 2019-03-06T17:37:38.397 回答