web server apache tomcat11-31-websocket

老马啸西风發表於2024-05-06

前言

整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。

開源專案

從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。

系列文章

web server apache tomcat11-01-官方文件入門介紹

web server apache tomcat11-02-setup 啟動

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

web server apache tomcat11-11-Jasper 2 JSP Engine

web server apache tomcat11-12-SSL/TLS Configuration

web server apache tomcat11-13-SSI

web server apache tomcat11-14-CGI

web server apache tomcat11-15-proxy

web server apache tomcat11-16-mbean

web server apache tomcat11-17-default-servlet

web server apache tomcat11-18-clusting 叢集

web server apache tomcat11-19-load balance 負載均衡

web server apache tomcat11-20-connectors 聯結器

web server apache tomcat11-21-monitor and management 監控與管理

web server apache tomcat11-22-logging 日誌

web server apache tomcat11-23-APR

web server apache tomcat11-24-Virtual Hosting and Tomcat

web server apache tomcat11-25-Advanced IO and Tomcat

web server apache tomcat11-26-maven jars

web server apache tomcat11-27-Security Considerations

web server apache tomcat11-28-Windows Service

web server apache tomcat11-29-Windows Authentication

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

web server apache tomcat11-31-websocket

web server apache tomcat11-32-rewrite

web server apache tomcat11-33-CDI

web server apache tomcat11-34-Ahead of Time compilation support

Tomcat WebSocket 技術文件

概述

Tomcat 支援 RFC 6455 所定義的 WebSocket。

應用開發

Tomcat 實現了由 Jakarta WebSocket 專案定義的 Jakarta WebSocket 2.1 API。

有幾個示例應用程式演示瞭如何使用 WebSocket API。您需要檢視客戶端的 HTML 程式碼和伺服器端的程式碼。

Tomcat WebSocket 特定配置

Tomcat 提供了一些針對 WebSocket 的特定配置選項。預計這些選項將隨著時間的推移被吸收到 WebSocket 規範中。

  • 在阻塞模式下傳送 WebSocket 訊息時使用的寫超時預設為 20000 毫秒(20 秒)。可以透過設定附加到 WebSocket 會話的使用者屬性集中的屬性 org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT 來更改此值。分配給此屬性的值應該是一個 Long 型別,表示要使用的超時時間(以毫秒為單位)。對於無限超時,請使用 -1。

  • 會話關閉超時預設為 30000 毫秒(30 秒)。可以透過設定附加到 WebSocket 會話的使用者屬性集中的屬性 org.apache.tomcat.websocket.SESSION_CLOSE_TIMEOUT 來更改此值。分配給此屬性的值應該是一個 Long 型別,表示要使用的超時時間(以毫秒為單位)。小於或等於零的值將被忽略。

  • 除了 Jakarta WebSocket API 的 Session.setMaxIdleTimeout(long) 方法外,Tomcat 還提供了更多控制會話因缺乏活動而超時的時間。設定附加到 WebSocket 會話的使用者屬性集中的屬性 org.apache.tomcat.websocket.READ_IDLE_TIMEOUT_MS 將在指定的毫秒數內未收到 WebSocket 訊息時觸發會話超時。設定屬性 org.apache.tomcat.websocket.WRITE_IDLE_TIMEOUT_MS 將在指定的毫秒數內未傳送 WebSocket 訊息時觸發會話超時。這些可以分別或共同使用,可以與或不使用 Session.setMaxIdleTimeout(long)。如果未指定相關屬性,則將應用讀取和/或寫入空閒超時。

  • 如果應用程式未為傳入的二進位制訊息定義 MessageHandler.Partial,則必須緩衝任何傳入的二進位制訊息,以便整個訊息可以在單個呼叫註冊的 MessageHandler.Whole 以二進位制訊息形式傳遞。二進位制訊息的預設緩衝區大小為 8192 位元組。可以透過將 servlet 上下文初始化引數 org.apache.tomcat.websocket.binaryBufferSize 設定為所需的位元組數來更改此值。

  • 如果應用程式未為傳入的文字訊息定義 MessageHandler.Partial,則必須緩衝任何傳入的文字訊息,以便整個訊息可以在單個呼叫註冊的 MessageHandler.Whole 以文字訊息形式傳遞。文字訊息的預設緩衝區大小為 8192 位元組。可以透過將 servlet 上下文初始化引數 org.apache.tomcat.websocket.textBufferSize 設定為所需的位元組數來更改此值。

  • 在使用 WebSocket 客戶端連線到伺服器端點時,建立連線期間的 IO 操作超時由所提供的 jakarta.websocket.ClientEndpointConfig 的 userProperties 控制。屬性為 org.apache.tomcat.websocket.IO_TIMEOUT_MS,以毫秒為單位的字串形式表示超時時間。預設值為 5000(5 秒)。

  • 在使用 WebSocket 客戶端連線到伺服器端點時,客戶端將遵循的 HTTP 重定向數量由所提供的 jakarta.websocket.ClientEndpointConfig 的 userProperties 控制。屬性為 org.apache.tomcat.websocket.MAX_REDIRECTIONS。預設值為 20。透過將值配置為零,可以禁用重定向支援。

  • 在使用 WebSocket 客戶端連線到需要 BASIC 或 DIGEST 認證的伺服器端點時,必須設定以下使用者屬性:

    • org.apache.tomcat.websocket.WS_AUTHENTICATION_USER_NAME
    • org.apache.tomcat.websocket.WS_AUTHENTICATION_PASSWORD

    可選地,可以僅在伺服器認證挑戰包含特定領域時,透過在可選使用者屬性中定義該領域,配置 WebSocket 客戶端僅傳送憑據:

    • org.apache.tomcat.websocket.WS_AUTHENTICATION_REALM
  • 在透過要求 BASIC 或 DIGEST 認證的轉發代理(也稱為閘道器)連線到伺服器端點時,必須設定以下使用者屬性:

    • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_USER_NAME
    • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_PASSWORD

    可選地,可以僅在伺服器認證挑戰包含特定領域時,透過在可選使用者屬性中定義該領域,配置 WebSocket 客戶端僅傳送憑據:

    • org.apache.tomcat.websocket.WS_PROXY_AUTHENTICATION_REALM

參考資料

https://tomcat.apache.org/tomcat-11.0-doc/web-socket-howto.html

相關文章