Websocket (Jetty): как обрабатывать двоичные данные на стороне сервера, которые поступают кусками

Мне нужно настроить сервер веб-сокетов, который может получать аудиоданные, отправленные клиентом. Я использую Jetty для этого.

Мой код обработчика:

{
    @OnWebSocketClose
    public void onClose(int statusCode, String reason) {
    }

    @OnWebSocketError
    public void onError(Throwable t) {
    }

    @OnWebSocketConnect
    public void onConnect(Session session) {

    }

    @OnWebSocketMessage
    public void onMessage(String message) {
    }

    @OnWebSocketMessage
    public void onMessage(bytes [] b) {
    }

    @OnWebSocketMessage
    public void inputStream(InputStream is) {
    }
}

Поскольку аудиофайл довольно большой, клиент отправляет его частями. Теперь для каждого фрагмента вызывается метод onMessage(bytes [] b) {}.

На стороне сервера мне нужно добавить эти куски и обработать звук. Как я могу это сделать?

И в чем разница между методами onMessage(bytes [] b) {} и onMessage(InputStream is) {}?


person shantanu    schedule 01.04.2017    source источник


Ответы (1)


person    schedule
comment
››Jetty автоматически соберет фрагменты и доставит целое сообщение вашему методу (в виде массива byte[] или InputStream). Причал не собирается. Для каждого фрагмента вызывается мой байтовый метод. - person shantanu; 11.04.2017
comment
@shantanu - Jetty правильно собирает фрагментированное сообщение, когда данные отправляются совместимым со спецификацией способом. Скорее всего, ваш клиент просто отправляет каждый фрагмент как независимое сообщение WS (см. мое обновление по этому вопросу). - person zeppelin; 11.04.2017