3

我有一个通过 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 中使用这种流式传输方式吗?

4

1 回答 1

4

如果我对您的理解正确-> 这是服务器 grpc 端点,您的问题是如何发送models.DronePosition回客户端。如果是这样,那么你有双向流,你可以解决这个问题:

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

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

于 2019-05-13T03:05:31.660 回答