【发布时间】:2021-09-28 01:57:57
【问题描述】:
我的目标是通知玩家是否实时加入团队。 由于将在控制器中创建播放器,因此我想通过套接字通知团队此更改。 这是我第一次尝试这样做:
@RestController
@RequestMapping("/api/secure/players/")
public class PlayerController {
@Autowired
private SimpMessagingTemplate simpMessageTemplate;
@PostMapping
public ResponseEntity<PlayerDTO> createPlayer() {
// ...
// data is being processed
// notify team about the change
simpMessageTemplate.convertAndSend("/teams/" + selectedTeam.getId() + "/", player);
return ...
}
}
@Controller
public class TeamSocket {
private static final Logger logger = LoggerFactory.getLogger(TeamSocket.class);
@MessageMapping("/teams/{team}")
@SendTo("/teams/{team}")
public void teamEvent(@DestinationVariable String team) {
logger.debug("Received message -> {}", team);
}
}
@Configuration
@ComponentScan
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// I still dont fully understand this. Do i have to enable it? (It does not fix the issue).
// config.enableSimpleBroker("/teams/");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/api/secure/stomp/").withSockJS();
}
}
但是,Spring 告诉我,它无法映射请求。我做错了什么?
DEBUG 29487 --- [nboundChannel-4] .WebSocketAnnotationMethodMessageHandler : Searching methods to handle SUBSCRIBE /teams/16 id=sub-0 session=0nkqv1km, lookupDestination='/teams/16'
DEBUG 29487 --- [nboundChannel-4] .WebSocketAnnotationMethodMessageHandler : No matching message handler methods.
DEBUG 29487 --- [nboundChannel-2] org.springframework.web.SimpLogging : Processing SUBSCRIBE /teams/16 id=sub-0 session=0nkqv1km
const client = new SockJS(`${REST_API}/api/secure/stomp/`);
const stompClient = Stomp.over(client);
stompClient.connect({}, (frame) => {
stompClient.subscribe(`/teams/${teamId}`, (message) => {
...
});
});
【问题讨论】:
标签: javascript java spring-boot sockets