如何用gRPC做异步流媒体?

2024-09-20 06:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用dart(flutter)客户机和python服务器用grpcapi进行实时图像分析。如何在gRPC中使用dart客户端设置异步图像流?(像websockets)


Tags: 图像服务器客户端grpc客户机websocketsdartflutter
2条回答

你的问题范围太大了。你必须决定你要流的是什么,你在试着流一个图像帧吗?请记住,如果您希望每个消息发送超过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.
}

这是一个相当大的主题,但是您要求的是一个dart客户机,所以我假设您有一个“.proto”-文件,它看起来像this和一个正常工作的python服务器。在

如果你想把你的dart客户机连接到一个异步流,你必须这样做。在

  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);
    });
  }

然后你这样叫这个方法:

^{pr2}$

相关问题 更多 >