如何使用Spring 4在我的webSocket服务器中捕获订阅事件

我在spring https://spring.io/guides/gs/messaging-stomp-websocket/之后用spring 4,STOMP和sock.js做了简单的web socket通信。

现在我想将其升级为简单聊天。 我的问题是,当用户订阅新的聊天室时,他应该过去的消息。 我不知道如何捕捉他订阅时向他发送消息列表的那一刻。

我尝试使用@MessageMapping注释,但没有取得任何成功:

@Controller public class WebSocketController { @Autowired private SimpMessagingTemplate messagingTemplate; @MessageMapping("/chat/{chatId}") public void chat(ChatMessage message, @DestinationVariable String chatId) { messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("message: " + message.getText())); } @SubscribeMapping("/chat") public void chatInit() { System.out.println("worked"); int chatId = 1; //for example messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("connected")); } } 

然后我创建了:

 @Controller public class ApplicationEventObserverController implements ApplicationListener { @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { System.out.println(applicationEvent); } } 

它有效,但捕获所有可能的事件,我认为这不是一个好习惯。

所以,我的问题可以改写:如何在用户提交给某些人时发送初始数据?

当使用@SubscribeMapping处理程序方法订阅目标时,您可以将任何内容直接返回给客户端。 返回的对象不会转到代理,而是直接发送给客户端:

 @SubscribeMapping("/chat") public Collection chatInit() { ... return messages; } 

在客户端:

 socket.subscribe("/app/chat", function(message) { ... }); 

查看GitHub上的聊天示例 ,其中显示了这个确切的场景。