如何从grpc服务器流式传输结果以及如何从goroutines grpc服务器流返回结果以将结果传递给api

时间:2019-05-13 02:16:37

标签: go grpc grpc-go

我有一个通过golang创建的api,它返回了

的结果
{
   id : drone4
   item_parameter : {
       altitude : 20,
       longitude : 10.20
      latitude : 24.5
}

作为json结果,但在代码中使用 调用go func()进行处理的go例程 grpc-server golang的结果

喜欢

go func() {
        fmt.Print("start getPosition loop")
        for {
            msg, err := stream.Recv() // msg UAVPosition
            if err == io.EOF {
                // read done.
                fmt.Print("start getPosition loop closed")
                close(position)
                return
            }
            if err != nil {
                log.Fatalf("Failed to receive getPosition : %v", err)
                close(position)
                return
            }
            log.Printf("Position point[%s](%f, %f, %f)", uavID.Aircraft, msg.Latitude, msg.Longitude, msg.Altitude)

            itemParameter := models.ItemParameter{
                Latitude:  msg.Latitude,
                Longitude: msg.Longitude,
                Altitude:  msg.Altitude,
            }

            position <- models.DronePosition{
                Name:          uavID.Aircraft,
                ItemParameter: itemParameter,
            }
        }
    }()

我需要获取我使用此通道的位置值

position := make(chan models.DronePosition)

如果有机会,如何使用go将结果流式传输到ui? 任何建议如何在ui中以这种流方式工作?

1 个答案:

答案 0 :(得分:3)

如果我正确理解您->这是服务器grpc端点,您的问题是如何将models.DronePosition发送回客户端。如果是这样,则您具有双向流传输,则可以通过以下方式解决此问题:

dronePosition := models.DronePosition{
                Name:          uavID.Aircraft,
                ItemParameter: itemParameter,
            }
position <- dronePosition
err = stream.Send(&dronePosition)

并且在客户端上应该有相应的更新以支持双向数据流