猿问

基于 Go 的 grpc 服务器流不断堆积对 Go 客户端的响应

抱歉,如果这是一个菜鸟问题,我是 grpc 的服务器端流媒体的新手。


我现在在流向客户端的服务器上的功能中拥有什么


req, err := http.NewRequest("GET", actualURL, nil)

//跳过一些行// res, _ := http.DefaultClient.Do(req)


// closing body

defer res.Body.Close()


body, err := ioutil.ReadAll(res.Body)

// 跳过一些行//


// unmarshaling the xml data received from the GET request done above

xmlDataErr := xml.Unmarshal(body, &ArrData)


// creating a variable of a custom type and creating object of specific struct Flight

var flightArrData ArrFlights

currArrData := flightArrData.Arr.Body.Flight

log.Println("计算要发送到客户端的总行数", len(currArrData))


// 循环响应并将其发送到客户端


对于 i := range currArrData {


    farr := &pb.FlightArrivalsResponse{

        ArrivalResponse: &pb.ArrivalFlightData{

            Hapt:     currArrData[i].HApt,

            Fltnr:    currArrData[i].Fltnr,

            Sdt:      currArrData[i].Sdt,

            Acreg:    currArrData[i].Acreg,

            Park:     currArrData[i].Park,

            EstD:     currArrData[i].EstD,

            Gate:     currArrData[i].Gate,

            AblkD:    currArrData[i].AblkD,

            ActD:     currArrData[i].ActD,

            Callsign: currArrData[i].Callsign,

        },

    }


    senderr := stream.Send(farr)


    // skipping some lines //

}

// 完成后返回 nil return nil }


我面临的问题 在客户端我有接收此响应的功能,休眠 n 分钟并再次请求响应。


客户在第一次通话中确实得到了预期的响应,但是对于每个后续通话都会发生一些奇怪的事情,这是我当前的问题,我尝试以下面每个后续通话的形式进行说明:


从客户端调用 1 到服务器 --> 服务器返回 200 行


客户睡眠 n 分钟


从客户端调用 2 到服务器 --> 服务器返回 400 行!!(基本上每行是 200 + 200 的两倍)


客户睡眠 n 分钟


从客户端调用 3 到服务器 --> 服务器返回 600 行!!(200+200+200)


慕后森
浏览 144回答 1
1回答

交互式爱情

我添加了以下几行 var emptyArrData ArrFlights,这基本上是完整的 XML 结构,并将这个 emptyArrData 分配给该结构flightArrData = emptyArrData
随时随地看视频慕课网APP

相关分类

Go
我要回答