WebSocket#

Tomcat предоставляет поддержку WebSocket в соответствии с RFC 6455 и реализует API Java WebSocket 1.1, определенное в JSR-356.

Также Tomcat предоставляет ряд специфичных настроек:

  1. Таймаут записи при отправке сообщений WebSocket в блокирующем режиме:

    • По умолчанию 20000 миллисекунд (20 секунд).

    • Изменяется путем установки свойства org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT в коллекции пользовательских свойств, прикрепленной к сессии WebSocket.

    • Значение должно быть типа Long и указывать таймаут в миллисекундах. Для бесконечного таймаута используйте -1.

  2. Таймаут ожидания закрытия сессии WebSocket:

    • По умолчанию: 30000 миллисекунд (30 секунд).

    • Изменяется путем установки свойства org.apache.tomcat.websocket.SESSION_CLOSE_TIMEOUT.

    • Значение должно быть типа Long. Значения меньше или равные нулю игнорируются.

  3. Таймаут записи при аномальном закрытии сессии:

    • По умолчанию: 50 миллисекунд.

    • Изменяется путем установки свойства org.apache.tomcat.websocket.ABNORMAL_SESSION_CLOSE_SEND_TIMEOUT.

    • Значение должно быть типа Long. Значения меньше или равные нулю игнорируются.

  4. Таймауты бездействия:

    • Помимо метода Session.setMaxIdleTimeout(long), Tomcat предоставляет более гибкий контроль за таймаутами сессии из-за отсутствия активности.

    • Установка свойства org.apache.tomcat.websocket.READ_IDLE_TIMEOUT_MS вызовет таймаут сессии, если не получено ни одного сообщения WebSocket за указанное количество миллисекунд.

    • Установка свойства org.apache.tomcat.websocket.WRITE_IDLE_TIMEOUT_MS вызовет таймаут сессии, если не отправлено ни одного сообщения WebSocket за указанное количество миллисекунд.

    • Данные свойства могут использоваться отдельно или вместе с методом Session.setMaxIdleTimeout(long) или без него.

  5. Размер буфера для бинарных сообщений:

    • По умолчанию: 8192 байта.

    • Изменяется путем установки параметра контекста сервлета org.apache.tomcat.websocket.binaryBufferSize.

  6. Размер буфера для текстовых сообщений:

    • По умолчанию: 8192 байта.

    • Изменяется путем установки параметра контекста сервлета org.apache.tomcat.websocket.textBufferSize.

  7. Программное развертывание после начала «рукопожатия» WebSocket:

    • Поведение контролируется параметром контекста сервлета org.apache.tomcat.websocket.noAddAfterHandshake.

    • По умолчанию можно изменить, установив системное свойство org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE в значение true, но явная настройка в контексте сервлета всегда имеет приоритет.

  8. Таймаут для операций ввода-вывода при установке соединения типа «WebSocket-клиент»:

    • Поведение контролируется свойством org.apache.tomcat.websocket.IO_TIMEOUT_MS в userProperties в javax.websocket.ClientEndpointConfig.

    • По умолчанию: 5000 миллисекунд (5 секунд).

  9. Настройка SSL для соединения типа «WebSocket-клиент»:

    • Конфигурация SSL контролируется свойствами userProperties в javax.websocket.ClientEndpointConfig:

      • org.apache.tomcat.websocket.SSL_CONTEXT;

      • org.apache.tomcat.websocket.SSL_PROTOCOLS;

      • org.apache.tomcat.websocket.SSL_TRUSTSTORE;

      • org.apache.tomcat.websocket.SSL_TRUSTSTORE_PWD.

    • Пароль по умолчанию для хранилища доверенных сертификатов: changeit.

    • Если установлено свойство org.apache.tomcat.websocket.SSL_CONTEXT, свойства SSL_TRUSTSTORE и SSL_TRUSTSTORE_PWD игнорируются.

  10. Проверка имени хоста для защищенных соединений:

    • По умолчанию включена проверка имени хоста.

    • Для отключения проверки необходимо предоставить пользовательский SSLContext через свойство org.apache.tomcat.websocket.SSL_CONTEXT.

  11. Ограничение количества перенаправлений HTTP:

    • Контролируется свойством org.apache.tomcat.websocket.MAX_REDIRECTIONS.

    • По умолчанию: 20 перенаправлений. Поддержку перенаправлений можно отключить, установив значение 0.

  12. Аутентификация BASIC или DIGEST:

    • Для подключения к серверу, требующему аутентификации, необходимо установить свойства:

      • org.apache.tomcat.websocket.WS_AUTHENTICATION_USER_NAME;

      • org.apache.tomcat.websocket.WS_AUTHENTICATION_PASSWORD.

    • Опционально можно указать область для аутентификации:

      • org.apache.tomcat.websocket.WS_AUTHENTICATION_REALM.

  13. Аутентификация через прокси:

    • Для подключения через прокси, требующий аутентификации, необходимо установить свойства:

      • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_USER_NAME;

      • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_PASSWORD.

    • Опционально можно указать Realm для аутентификации:

      • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_REALM.