在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ WebSocket 支持
附加組件
集群化與會話復(fù)制
負(fù)載均衡器
連接器
監(jiān)控與管理
日志機(jī)制
基于 APR 的原生庫
虛擬主機(jī)
高級 IO 機(jī)制
默認(rèn) Servlet
如何在 Maven 中使用 Tomcat 庫
安全性注意事項(xiàng)
Windows 服務(wù)
Windows 認(rèn)證
Tomcat 的 JDBC 連接池
WebSocket 支持
重寫機(jī)制
簡介
MBean 描述符
代理支持
CGI
SSI(服務(wù)器端嵌入)
SSL/TLS 配置
JSPs
類加載機(jī)制
JDBC 數(shù)據(jù)源
JNDI 資源
安全管理
Realm 配置
Tomcat Manager
Tomcat Web 應(yīng)用部署
第一個應(yīng)用
安裝

WebSocket 支持

簡介

Tomcat 支持由 RFC 6455 所定義的 WebSocket。

應(yīng)用開發(fā)

Tomcat 實(shí)現(xiàn)由 JSR-356 定義的 Java WebSocket 1.1 API。

關(guān)于 WebSocket API 的使用方法,可查看相關(guān)范例,既需要查看客戶端 HTML 代碼,也需要查看服務(wù)器代碼。

生產(chǎn)用途

雖然 WebSocket 實(shí)現(xiàn)可以和任何 HTTP 連接器一起使用,但并不建議和 BIO HTTP 連接器一起使用,因?yàn)?WebSocket 典型用途(大量連接很多時候都是空閑的)并不是很適合 HTTP BIO 連接器,因?yàn)樵撨B接器需要不管連接是否空閑,每個連接都應(yīng)該分配一個線程。

目前,已有報(bào)告(56304)發(fā)現(xiàn),Linux 會用大量時間來報(bào)告刪除的連接。當(dāng)利用 BIO HTTP 連接器使用 WebSocket 時,當(dāng)在這段時間內(nèi)寫入時,就容易產(chǎn)生線程阻塞。這似乎不是一種理想的解決方案。使用內(nèi)核網(wǎng)絡(luò)參數(shù) /proc/sys/net/ipv4/tcp_retries2,可以減少報(bào)道刪除的連接所花費(fèi)的時間?;蛘呖梢赃x擇另一種 HTTP 連接器,因?yàn)樗鼈兪褂玫氖欠亲枞?IO,從而能讓 Tomcat 實(shí)現(xiàn)自己的超時機(jī)制來解決這些問題。

Tomcat WebSocket 特定配置

Tomcat 為 WebSocket 提供了一些 Tomcat 專有配置選項(xiàng)。這些配置將來有望能進(jìn)入 WebSocket 正式規(guī)范中。

以阻塞模式發(fā)送 WebSocket 消息所用的寫入超時默認(rèn)值為 20000 毫秒(20 秒)。通過設(shè)定連接到 WebSocket 會話的用戶屬性集合中的 org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT 屬性,我們可以修改這個寫入超時屬性值。該屬性值類型應(yīng)該為 Long,以毫秒表示所用的超時時間,-1 表示超時無限。

如果應(yīng)用沒有為傳入的二進(jìn)制消息定義 MessageHandler.Partial,那么必須先對任何傳入的二進(jìn)制消息進(jìn)行緩存,繼而可以通過調(diào)用一個已注冊專用于處理二進(jìn)制消息的 MessageHandler.Whole 來傳遞整個消息。默認(rèn)用于二進(jìn)制消息的緩存容量是 8192 字節(jié)。在應(yīng)用中,將servlet 上下文初始參數(shù) org.apache.tomcat.websocket.binaryBufferSize 設(shè)置為期望的字節(jié)值,就能修改這個緩存容量。

如果應(yīng)用沒有為傳入的文本消息定義 MessageHandler.Partial,那么必須先對任何傳入的文本消息進(jìn)行緩存,繼而可以通過調(diào)用一個已注冊專用于處理文本消息的 MessageHandler.Whole 來傳遞整個消息。默認(rèn)用于文本消息的緩存容量是 8192 字節(jié)。在應(yīng)用中,將servlet 上下文初始參數(shù) org.apache.tomcat.websocket.textBufferSize 設(shè)置為期望的字節(jié)值,就能修改這個緩存容量。

Java WebSocket 規(guī)范 1.0 并不允許第一個服務(wù)端點(diǎn)開始 WebSocket 握手之后進(jìn)行程序性部署。默認(rèn)情況下,Tomcat 繼續(xù)允許額外的程序性部署。這一行為是通過 servlet 上下文初始化參數(shù) org.apache.tomcat.websocket.noAddAfterHandshake 來控制的。將系統(tǒng)屬性 org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE 變?yōu)?true,可以改變默認(rèn)值,但是 servlet 上下文中的顯式設(shè)置卻總是優(yōu)先的。

Java WebSocket 規(guī)范 1.0 要求,異步寫操作的回調(diào)所在的線程應(yīng)不同于初始化寫操作的線程。因?yàn)槿萜骶€程池并未通過 Servlet API 暴露出來,所以 WebSocket 實(shí)現(xiàn)必須提供自己的線程池。這種線程池通過下列 Servlet 上下文初始化參數(shù)來控制:

  • org.apache.tomcat.websocket.executorCoreSize:executor 線程池的核心容量大小。如果不設(shè)置,則采用默認(rèn)值 0。注意,executor 線程池最大允許容量被硬編碼至 Integer.MAX_VALUE,實(shí)際上可以認(rèn)為該值是無限的。
  • org.apache.tomcat.websocket.executorKeepAliveTimeSeconds:在終止前,空閑線程在 executor 線程池中留存的最長時間。如未指定,則采用默認(rèn)的 60 秒。

在使用 WebSocket 客戶端來連接服務(wù)端點(diǎn)時,建立該連接的 IO 超時是通過提供的 javax.websocket.ClientEndpointConfiguserProperties 來控制的。該屬性是 org.apache.tomcat.websocket.IO_TIMEOUT_MS,是以字符串形式表示的超時時間(以毫秒計(jì)),默認(rèn)為 5000(5 秒)。

在使用 WebSocket 客戶端來連接安全的服務(wù)端點(diǎn)時,客戶端 SSL 配置是通過提供的 javax.websocket.ClientEndpointConfiguserProperties 來控制的。提供以下用戶屬性:

  • 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

默認(rèn)的信任存儲密碼(truststore password)為:changeit。

如果設(shè)置了 org.apache.tomcat.websocket.SSL_CONTEXT 屬性,則將忽略這兩個屬性:org.apache.tomcat.websocket.SSL_TRUSTSTOREorg.apache.tomcat.websocket.SSL_TRUSTSTORE_PWD

上一篇:簡介下一篇:JNDI 資源