您的位置:首页 > 运维架构 > Tomcat

Apache Tomcat 8 WebSocket How-To 中文翻译版

2014-09-18 10:41 676 查看



Apache Tomcat 8

WebSocket How-To


内容导航

概述
应用程序开发
生产使用
Tomcat WebSocket具体的配置


概述

Tomcat提供对在RFC 6455定义的WebSocket的支持。


应用程序开发

Tomcat实现在JSR-356中定义的Java WebSocket 1.0 API。
有几个示例应用程序,演示了如何使用WebSocket API。你需要看看客户端的HTML和服务器端的代码


生产使用

虽然WebSocket实现可以与任何HTTP连接器一起工作,但是不推荐WebSocket和BIO HTTP连接器配合使用。因为WebSocket的典型使用并不适合HTTP BIO连接器,HTTP BIO 连接器要求为每个连接分配一个线程,而不管是否有空闲的连接。

据报告(56304),Linux会花费大量时间来报告丢掉的连接。当以BIO HTTP连接器使用WebSocket时,这可能会导致该时段内写入出现阻塞。这似乎是不可取的。通过使用内核网络参数/proc/sys/net/ipv4/tcp_retries2,可以减少因连接丢失所花费的报告时间。此外,他们使用了非阻塞IO,可以让Tomcat实现自己的超时机制从而处理这些情况,你也可以使用其他的HTTP连接器。


Tomcat WebSocket具体的配置

Tomcat为WebSocket提供了一些Tomcat特定的配置选项。随着时间的推移,预计这些将被收录到WebSocket规范中。当在阻塞模式下发送WebSocket信息时,使用的写入超时时间默认为20000毫秒(20秒)。你可以通过在用户属性集合中设置
org.apache.tomcat.websocket.BLOCKING_SEND_TIMEOUT
来进行变更,用户属性集合被附加到WebSocket
会话中。

分配给该属性的值应该是一个Long类型的数据,并以毫秒为单位来表示使用的超时时间。如果不限制超时时间,请使用-1。

如果应用程序没有为输入的二进制信息定义一个
MessageHandler.Partial
,任何输入的二进制信息都应该被缓冲,这样,整个消息可以在一次调用中传递给为二进制信息注册的
MessageHandler.Whole
。二进制信息默认的缓存大小为8192字节(8KB)。你也可以通过为servlet
context的初始化参数
org.apache.tomcat.websocket.binaryBufferSize
设置期望的以字节为单位的值来更改它。

Java WebSocket 规范 1.0不允许在第一个终端已经开始一个WebSocket握手之后进行规划部署。在默认情况下,Tomcat继续允许额外的规划部署。该行为可以通过servlet context的初始化参数org.apache.tomcat.websocket.noAddAfterHandshake来控制。

你可以通过设置系统属性
org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE
true
来修改默认值,但是servlet context中的任何显示设置将始终被优先采用。

Java WebSocket 1.0 规范要求在一个不同的线程上执行到发起写入的线程的异步写入回调。由于容器线程池不是通过Servlet API被暴露,因此WebSocket实现必须提供自己的线程池。该线程池可以通过下列servlet context初始化参数被控制:

org.apache.tomcat.websocket.executorCoreSize
:
executor线程池的核心大小。如果不设置,则默认为0。
org.apache.tomcat.websocket.executorMaxSize
:executor线程池所允许的最大值。如果不设置,则默认为200。
org.apache.tomcat.websocket.executorKeepAliveTimeSeconds
:executor线程池中空闲进程所保留的最大时间。如果未指定,则默认为60秒。

当使用WebSocket客户端连接到服务器端时,你可以通过
javax.websocket.ClientEndpointConfig
提供的
userProperties
来控制建立连接时IO操作的超时时间。该属性为
org.apache.tomcat.websocket.IO_TIMEOUT_MS
,它是一个表示超时时间的、单位为毫秒的字符串(
String
)。默认值为5000(5秒)。

当使用WebSocket客户端连接到安全服务器终端,你可以使用
javax.websocket.ClientEndpointConfig
提供的
userProperties
来控制客户端SSL的配置。可以支持下列用户属性:

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
属性,那么
org.apache.tomcat.websocket.SSL_TRUSTSTORE
org.apache.tomcat.websocket.SSL_TRUSTSTORE_PWD
属性将会被忽略。

-----------------------------------------------------------------------------------

转载自:http://www.softown.cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: