创建 WebSocket 服务器 就像实现 WebSocketHandler 一样简单,或者更可能的是扩展 TextWebSocketHandler 或 BinaryWebSocketHandler。下面的例子使用了 TextWebSocketHandler:

    1. import org.springframework.web.socket.WebSocketHandler;
    2. import org.springframework.web.socket.WebSocketSession;
    3. import org.springframework.web.socket.TextMessage;
    4. public class MyHandler extends TextWebSocketHandler {
    5. @Override
    6. public void handleTextMessage(WebSocketSession session, TextMessage message) {
    7. // ...
    8. }
    9. }

    有专门的 WebSocket Java 配置和 XML 命名空间支持,用于将前面的 WebSocket 处理程序映射到一个特定的 URL,如下例所示:

    1. import org.springframework.web.socket.config.annotation.EnableWebSocket;
    2. import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
    3. import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
    4. @Configuration
    5. @EnableWebSocket
    6. public class WebSocketConfig implements WebSocketConfigurer {
    7. @Override
    8. public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    9. registry.addHandler(myHandler(), "/myHandler");
    10. }
    11. @Bean
    12. public WebSocketHandler myHandler() {
    13. return new MyHandler();
    14. }
    15. }

    下面的例子显示了前述例子的 XML 配置等效:

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xmlns:websocket="http://www.springframework.org/schema/websocket"
    4. xsi:schemaLocation="
    5. http://www.springframework.org/schema/beans
    6. https://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/websocket
    8. https://www.springframework.org/schema/websocket/spring-websocket.xsd">
    9. <websocket:handlers>
    10. <websocket:mapping path="/myHandler" handler="myHandler"/>
    11. </websocket:handlers>
    12. <bean id="myHandler" class="org.springframework.samples.MyHandler"/>
    13. </beans>

    前面的例子是用于 Spring MVC 应用的,应该包含在 DispatcherServlet 的配置中。然而,Spring 的 WebSocket 支持并不依赖于 Spring MVC。在WebSocketHttpRequestHandler 的帮助下,将 WebSocketHandler 集成到其他 HTTP 服务环境中是比较简单的。

    当直接或间接使用 WebSocketHandler API 时,例如通过 STOMP 消息传递,应用程序必须同步发送消息,因为底层标准 WebSocket 会话(JSR-356)不允许并发发送。一种选择是用 ConcurrentWebSocketSessionDecorator 来包装 WebSocketSession。