【发布时间】:2015-03-05 06:39:40
【问题描述】:
我使用 spring 4、STOMP 和 sock.js 进行了简单的 Web 套接字通信,遵循 https://spring.io/guides/gs/messaging-stomp-websocket/
现在我想将它升级为简单聊天。我的问题是当用户订阅新的聊天室时,他应该得到过去的消息。我不知道如何捕捉他订阅向他发送消息列表的那一刻。
我尝试使用@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<ApplicationEvent> {
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
System.out.println(applicationEvent);
}
}
它有效,但捕获了所有可能的事件,我认为这不是一个好习惯。
所以,我的问题可以改写:当用户订阅某事时如何发送初始数据?
【问题讨论】:
-
我在这里找到了类似的问题:stackoverflow.com/questions/24795340/…
-
似乎与this one 类似的问题。看看我的回答,看看对你有没有用。
标签: java spring spring-mvc websocket stomp