【发布时间】:2020-04-18 19:28:12
【问题描述】:
我正在开发应用程序,它具有用于实体上的 CRUD 操作的常规端点(我正在注入控制器),应用程序的流程应该使实体的属性不断变化,所以我需要通知前端这些变化实时。这就是我注册Web Socket的原因
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry.addHandler(new PositionHandler(),"/positions").setAllowedOrigins("*");
}
class PositionHandler extends TextWebSocketHandler {
private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
while(session.isOpen()){
HERE I WOULD LIKE TO ACCESS METHOD FOR CONTROLLER
}
super.afterConnectionEstablished(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
for(WebSocketSession s: sessions){
session.sendMessage(message);
}
super.handleTextMessage(session, message);
}
}
}
在 afterConnectionEstablished 内部我想使用注入到普通 @RestController 类的控制器中的方法。有没有可能做到这一点?如果不是,我应该如何重构。 PS WebSocket 有效。
【问题讨论】:
-
在 spring 中查找 STOMP,您可以在控制器中使用 SimpMessagingTemplate
标签: java spring spring-boot websocket