ResourceProvider не отправляет ответ, если он слишком большой

#movesense

Вопрос:

Я работаю с Movesense 2.0.0 на симуляторе и внедряю свои собственные API.
Это (часть) моего YAML со спецификацией API

   /hs/Log/{Log_Id}/Data:
    get:
      description: |
        Function returning Log Data
      responses:
        200:
          description: Log Data
          schema:
            $ref: '#/definitions/LogData'
        404:
          description: Referenced log not found in LogBook.
    parameters:
       - $ref: '#/parameters/Log_Id'

parameters:
  Log_Id:
    name: Log_Id
    in: path
    required: true
    type: integer
    format: int32

definitions:
  LogData:
    required:
      - Data
    properties:
      Data:
        description: Log Data
        type: array
        items:
          type: integer
          format: int32
 

И это переопределенный метод, обрабатывающий его:

 void HSService::onGetRequest(const whiteboard::Requestamp; request,
                                     const whiteboard::ParameterListamp; parameters)
{

    if (mModuleState != WB_RES::ModuleStateValues::STARTED)
    {
        return returnResult(request, wb::HTTP_CODE_SERVICE_UNAVAILABLE);
    }

    switch (request.getResourceConstId())
    {
    case WB_RES::LOCAL::HS_LOG_LOG_ID_DATA::ID:
    {
            WB_RES::LogData resp;
            int32_t tmp[128] = { 0 };
            resp.data = wb::MakeArray<int32_t>(tmp, 128);
             return returnResult(request, whiteboard::HTTP_CODE_OK, ResponseOptions::Empty, resp);
        }
    }
    break;

    default:
        return returnResult(request, whiteboard::HTTP_CODE_NOT_FOUND);
    }
}
 

Когда я отправляю запрос с помощью wbcmd, он зависает, пока не покажет время ожидания 408, но если сделать tmp буфер меньше (121 или менее элементов), он работает безупречно.
Я делаю что-то не так?

Ответ №1:

Доска имеет (для ограничения использования ресурсов на датчике) максимальный размер пакета, что приводит к максимальному размеру полезной нагрузки. В настоящее время длина WB_MAX_MESSAGE_PAYLOAD_LENGTH составляет 466 байт.

Ограничения для белой доски определены в файле WhiteboardConfig.h

Полный отказ от ответственности: Я работаю в команде Movesense

Комментарии:

1. Спасибо. Каков предлагаемый способ передачи больших (до нескольких КБ) блоков данных?