Azure / qpid-proton-j-extensions maxframesize ограничивает размер сообщений до 4 КБ - PullRequest
0 голосов
/ 24 апреля 2019

Azure / qpid-proton-j-extensions WebSocketHandlerImpl выдает исключение, если буфер назначения меньше, чем поток сообщений, который, кажется, жестко закодирован до 4 КБ плюс некоторая информация заголовка ... из того, что я прочитал, сервисная шина Azure позволяетсообщения до 256 КБ, 1 МБ для премиум-класса, плюс заголовок 64 КБ

. Есть ли в любом случае, мы можем получить это до 256 КБ?

WebSocketHandlerImpl:
 dstBuffer.clear();
            if (dstBuffer.capacity() >= webSocketFrame.size()) {
                dstBuffer.put(webSocketFrame.toByteArray());
            } else {
                throw new OutOfMemoryError("insufficient output buffer size");
            }
        } else {

WebSocketImpl:
  private int maxFrameSize = (4 * 1024) + (16 * WebSocketHeader.MED_HEADER_LENGTH_MASKED);

1 Ответ

0 голосов
/ 24 апреля 2019

Согласно исходному коду WebSocketHandlerImpl.java#L90, как показано ниже, я думаю, что у вас есть ошибка для понимания кода dstBuffer.capacity() >= webSocketFrame.size() с переменной webSocketFrame.

// Auto growing buffer for the WS frame, initialized to minimum size
ByteArrayOutputStream webSocketFrame = new ByteArrayOutputStream(WebSocketHeader.MIN_HEADER_LENGTH_MASKED + dataLength);

Переменная webSocketFrame не была жестко закодирована с фиксированным размером, которая является ByteArrayOutputStream объектом с автоматически растущим буфером. Однако переменная dstBuffer представляет собой объект ByteBuffer с фиксированным размером полезной нагрузки и заголовка веб-сокета. См. Тестовый код WebSocketHandlerImplTest.java, например, ниже.

// public void testWrapBuffer_short_payload() {
// L296
int payloadLength = 100;
int messageLength = payloadLength + WebSocketHeader.MIN_HEADER_LENGTH_MASKED;

// L305
ByteBuffer srcBuffer = ByteBuffer.allocate(payloadLength);
ByteBuffer dstBuffer = ByteBuffer.allocate(messageLength);

// And others functions testWrapBuffer_xxxx_payload
...