PS:在做之前,我看了网上的,发现逻辑不通,有点没搞懂,而且方法已经过时。若觉得说得不对,请指出。
1、websocket 分为两种方式,1是使用sockjs,2是使用h5的标准
2、大部分是继承 AbstractWebSocketMessageBrokerConfigurer 进行配置,但实际这个类已经过时了
随便写了个类,可以看到已经提示过时了
然后实现的方法
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/webSocketServer").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue","/topic");
}
其中 registerStompEndpoints 方法是定义通道,这个不难理解。就是建立连接
而configureMessageBroker方法是定义请求应带的前缀
但我没搞懂的是,这样是可以了,确实方便,然后就是前端代码了,但是,对于请求、参数、消息等等,不进行一些拦截,判断处理吗?控制器也是简单的一个方法就可以了
@MessageMapping("/ws/chat")
public void handleChat(Principal principal, String msg) {
String destUser = msg.substring(msg.lastIndexOf(";") + 1, msg.length());
String message = msg.substring(0, msg.lastIndexOf(";"));
messagingTemplate.convertAndSendToUser(destUser, "/queue/chat", new ChatResp(message, principal.getName()));
}
还有一些注解,或许注解以及继承的父类中有一定的处理,但并不是适应所有的实际需求吧?那这样的我实在是没搞懂(可能是我自己技术不够,勿喷)
而利用h5的还好,至少h5的能够自己处理连接前,连接后,发送消息,进行路径参数等判断