как использовать onWebSocketBinary API Jetty в реальных приложениях - PullRequest
1 голос
/ 14 апреля 2019

API-подпись метода obWebSocketBinary для WebSocketListener и его подклассов выглядит следующим образом:

void onWebSocketBinary​(byte[] payload, int offset, int len)

Давайте назовем байты в payload из offset due len - 'current_bytes'. Как мне интерпретировать этот API:

  • 'current_bytes' - это двоичное сообщение целом , отправленное клиентом, остальная часть массива payload не связана с этим вызовом сеанса
  • 'current_bytes' - частичное двоичное сообщение, и я должен собирать данные до тех пор, пока offset + len не будет равен payload.length
  • «current_bytes» - это частичное двоичное сообщение, но я должен сам управлять понятием «полное сообщение доставлено» посредством проверки содержимого полезной нагрузки

Если, предположительно, offset из-за len не является полным содержимым массива payload, могу ли я считать его «разделяемой» памятью, используемой в качестве буфера для различных полезных нагрузок?

1 Ответ

2 голосов
/ 15 апреля 2019

API - это целые двоичные сообщения.

Причина смещения / длины в том, что байтовые буферы выделяются до того, как станет известна вся общая длина всего сообщения веб-сокета.

Таким образом, отправляемый вам байтовый буфер часто больше, чем сообщение.

Если вам нужны частичные сообщения, вам нужно знать флаг "fin" (final).

Для частичного двоичного кода вы должны использовать интерфейс WebSocketPartialListener и использовать метод ...

onWebSocketPartialBinary​(java.nio.ByteBuffer payload, boolean fin)
...