我在项目中使用不带STOMP的WebSockets。
以下配置适用于 spring-boot
。
在 pom.xml 中添加spring boot websocket依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>${spring-boot.version}</version>
</dependency>
接下来添加一个类(这里是 WebSocketServerConfiguration.java
),用于配置你的 websocket:
@Configuration
@EnableWebSocket
public class WebSocketServerConfiguration implements WebSocketConfigurer {
@Autowired
protected MyWebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/as");
}
}
最终您可以编写WebsocketHandler。Spring为WebSocketHandlers提供了不同的抽象类(在主包:org.springframework.web.socket.handler
中)。我的WebSocket没有使用STOMP
,且客户端没有使用socket.js
。因此,MyWebSocketHandler
扩展了TextWebSocketHandler,并重写了用于处理错误、打开和关闭连接以及接收文本的方法。
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
...
@Override
public void handleTransportError(WebSocketSession session, Throwable throwable) throws Exception {
LOG.error("error occured at sender " + session, throwable);
...
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
LOG.info(String.format("Session %s closed because of %s", session.getId(), status.getReason()));
...
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOG.info("Connected ... " + session.getId());
...
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage jsonTextMessage) throws Exception {
LOG.debug("message received: " + jsonTextMessage.getPayload());
...
}
}