sin*_*sem 11 java spring stomp spring-mvc 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"));
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了:
@Controller
public class ApplicationEventObserverController implements ApplicationListener<ApplicationEvent> {
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
System.out.println(applicationEvent);
}
}
Run Code Online (Sandbox Code Playgroud)
它有效,但捕获所有可能的事件,我认为这不是一个好习惯.
所以,我的问题可以改写:如何在用户提交给某些人时发送初始数据?
当使用@SubscribeMapping处理程序方法订阅目标时,您可以将任何内容直接返回给客户端.返回的对象不会转到代理,而是直接发送给客户端:
@SubscribeMapping("/chat")
public Collection<ChatMessage> chatInit() {
...
return messages;
}
Run Code Online (Sandbox Code Playgroud)
在客户端:
socket.subscribe("/app/chat", function(message) {
...
});
Run Code Online (Sandbox Code Playgroud)
查看GitHub上的聊天示例,其中显示了这个确切的场景.
| 归档时间: |
|
| 查看次数: |
7975 次 |
| 最近记录: |