Как сделать асинхронную потоковую передачу с gRPC? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь выполнить анализ изображений в реальном времени с помощью клиента dart (флаттера) и сервера python с API gRPC.Как настроить асинхронную потоковую передачу изображений с помощью dart-client в gRPC? (Например, websockets)

Ответы [ 2 ]

0 голосов
/ 14 августа 2019

Это довольно большая тема, но вы просили dart-клиент, поэтому я предполагаю, что у вас есть файл " .proto ", который выглядит как this и рабочий питон-server.

Если вы хотите подключить ваш 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);
    });
  }

Затем вы вызываете этот метод следующим образом:

obj.getFrames((Frame f){
  print("New Frame received" + f.toString());
});
0 голосов
/ 06 марта 2019

Объем вашего вопроса слишком велик.Вы должны принять решение о том, что вы собираетесь транслировать, вы пытаетесь транслировать один кадр изображения?Помните, что gRPC рекомендует либо перепроектировать вашу систему, либо использовать что-то еще, если вы собираетесь отправлять более 1 МБ на сообщение.

Я не знаком с 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.
}
...