gRPC в Java - Как получить содержимое файла в качестве ответа

Я новичок в программировании gRPC. Мне нужно написать клиент gRPC, который получает содержимое файла, отправленное с сервера gRPC, и отправляет этот контент на веб-страницу. Поскольку содержимое файла огромно, я установил его как поток. Ниже мой файл .proto

service LogService {    
    rpc fetchLogContent(LogRequest) returns (stream LogResponse);
}

message LogRequest {
    string ip = 1;
    string fileName = 2;
}

message LogResponse {
    string ip = 1;
    string logContent = 2;
}

Теперь в клиенте, когда я использую blockingStub для доступа к fetchLogContent, он возвращает Iterator. Я понимаю из предоставленных примеров grpc.io - java, если есть список объектов ответа (список объектов Feature в примере, приведенном в ссылке), Iterator будет действительным. Но в моем случае мне нужен один LogResponse, который был отправлен в виде потока. Пожалуйста, предоставьте любые предложения / альтернативы для этого. Заранее спасибо. :)


person Mounika Sai    schedule 25.07.2018    source источник


Ответы (1)


В определении вашего метода:

rpc fetchLogContent(LogRequest) returns (stream LogResponse);

Ключевое слово stream означает, что вы получите 0 или более сообщений LogResponse. Если содержимое очень велико, вы можете читать фрагменты файла (например, 4 КБ) и отправлять несколько сообщений LogResponse, каждое с частью файла. Клиентская сторона может многократно читать фрагменты и собирать их вместе.

Поскольку поле ip, скорее всего, не будет меняться каждый раз, вы можете настроить сервер только для установки ip в первом сообщении. На клиенте просто используйте самый первый полученный ip.

person Carl Mastrangelo    schedule 25.07.2018