Server Configuration
每个底层 WebSocket 引擎都公开了控制运行时特性的配置属性,如消息缓冲区大小、空闲超时等。
对于 Tomcat、WildFly 和 GlassFish,你可以将 ServletServerContainerFactoryBean 添加到你的 WebSocket Java config 中,如下例所示:
@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {@Beanpublic ServletServerContainerFactoryBean createWebSocketContainer() {ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();container.setMaxTextMessageBufferSize(8192);container.setMaxBinaryMessageBufferSize(8192);return container;}}
等效的 XML 配置
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:websocket="http://www.springframework.org/schema/websocket"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/websockethttps://www.springframework.org/schema/websocket/spring-websocket.xsd"><bean class="org.springframework...ServletServerContainerFactoryBean"><property name="maxTextMessageBufferSize" value="8192"/><property name="maxBinaryMessageBufferSize" value="8192"/></bean></beans>
:::info 对于客户端的 WebSocket 配置,你应该使用 WebSocketContainerFactoryBean(XML)或 ContainerProvider.getWebSocketContainer()(Java 配置)。 :::
对于 Jetty,你需要提供一个预配置的 Jetty WebSocketServerFactory,并通过 WebSocket Java 配置将其插入 Spring 的 DefaultHandshakeHandler。下面的例子展示了如何做到这一点:
@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(echoWebSocketHandler(),"/echo").setHandshakeHandler(handshakeHandler());}@Beanpublic DefaultHandshakeHandler handshakeHandler() {WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);policy.setInputBufferSize(8192);policy.setIdleTimeout(600000);return new DefaultHandshakeHandler(new JettyRequestUpgradeStrategy(new WebSocketServerFactory(policy)));}}
对应的 XML 配置如下
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:websocket="http://www.springframework.org/schema/websocket"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/websockethttps://www.springframework.org/schema/websocket/spring-websocket.xsd"><websocket:handlers><websocket:mapping path="/echo" handler="echoHandler"/><websocket:handshake-handler ref="handshakeHandler"/></websocket:handlers><bean id="handshakeHandler" class="org.springframework...DefaultHandshakeHandler"><constructor-arg ref="upgradeStrategy"/></bean><bean id="upgradeStrategy" class="org.springframework...JettyRequestUpgradeStrategy"><constructor-arg ref="serverFactory"/></bean><bean id="serverFactory" class="org.eclipse.jetty...WebSocketServerFactory"><constructor-arg><bean class="org.eclipse.jetty...WebSocketPolicy"><constructor-arg value="SERVER"/><property name="inputBufferSize" value="8092"/><property name="idleTimeout" value="600000"/></bean></constructor-arg></bean></beans>
