Невозможно отправить чанки, используя поток - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь использовать Поток GRPC на стороне клиента при обработке изображений. Я также новичок в потоке GRPC. Здесь я буду создавать изображение небольшими порциями и отправлять их на сервер.создан, но не может его отправить.Наконец, я получаю ошибку EOF.

Здесь я приложил свой пример кода, который может подсказать любой, кто мне может помочь.

Пример:

 func (c *ClientGRPC) UploadFile(ctx context.Context) (stats stats.Stats, err error) {

    var (
        writing = true
        buf     []byte
        n       int
        status  *pb.UploadStatus
    )

    cwd, _ := os.Getwd()
    templatePath := filepath.Join(cwd, "/unnamed.png")

    file, err := os.Open(templatePath)

    if err != nil {
        err = errors.Wrapf(err,
            "failed to open file %s",
            file)
        return
    }

    defer file.Close()

    stream, err := c.client.Upload(ctx)
    if err != nil {
        err = errors.Wrapf(err,
            "failed to create upload stream for file %s",
            file)
        return
    }

    defer stream.CloseSend()



    buf = make([]byte, c.chunkSize)

    for writing {
        n, err = file.Read(buf)

        if err != nil {
            if err == io.EOF {
                writing = false
                err = nil
                continue
            }

            err = errors.Wrapf(err,
                "errored while copying from file to buf")
            return
        }

        err = stream.Send(&pb.Chunk{
            Content: buf[:n],
        })
        if err != nil {
            err = errors.Wrapf(err,
                "failed to send chunk via stream") //`Here, I'm getting EOF error`.
            return
        }
    }



    status, err = stream.CloseAndRecv()
    if err != nil {
        err = errors.Wrapf(err,
            "failed to receive upstream status response")
        return
    }

    if status.Code != pb.UploadStatusCode_Ok {
        err = errors.Errorf(
            "upload failed - msg: %s",
            status.Message)
        return
    }

    return

}

Вывод:

client=====> failed to send chunk via stream: EOF

1 Ответ

0 голосов
/ 26 декабря 2018

Если вы используете grpc внизу, запустите вашу программу с переменной среды GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info, чтобы получить журналы от grpc для более глубокой отладки (т. Е. Это проблема уровня соединения или проблемы уровня потока).

...