和服务器保存长连接,不是http,首先和客服端建立连接
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.实现接口WebSocketMessageBrokerConfigurer,重写注册请求和信息代理方法
@Configuration
@EnableWebSocketMessageBroker
public class SocketConfig implements WebSocketMessageBrokerConfigurer {
/**
* 注册请求
* @param registry
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
//配置建立 websocket客服端请求地址,withSockJS前端用它
registry.addEndpoint("/ws/ep").setAllowedOrigins("*").withSockJS();
}
/**
* 配置消息代理
* @param registry
*/
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue"); //用户点对点聊
}
}
3.接受用户msg对象,发送给某用户
/**
* 点对点聊天
*/
@Controller
public class WsController {
/**
* Simp消息发送
*/
@Autowired
SimpMessagingTemplate simpMessagingTemplate;
/**
*
* @param principal 获取用户登陆状态
* @param msg 信息对象
*/
@MessageMapping("/ws/chat")
public void receive(Principal principal,Msg msg){
String from = principal.getName(); //用户对象
msg.setFrom(from); //从哪里来
simpMessagingTemplate.convertAndSendToUser(msg.getTo(),"/queue/chat",msg);//发给某地址用户
}
4.定义一个msg信息对象
/**
* 消息对象
*/
public class Msg implements Serializable {
private String content; //信息内容
private String from; //从哪里来
private String to; //发信息
前端一段重要代码
initCon() {
let _this = this;
this.stomp = Stomp.over(new SockJS('/ws/ep'));//配置websocket 连接
this.stomp.connect({},success=>{
_this.stomp.subscribe('/user/queue/chat',msg=>{ //监听订阅服务端"/queue/chat"信息
_this.msgs.push(JSON.parse(msg.body))
})
},failed=>{
});//建立websocket 连接
},
send() {
this.stomp.send('/ws/chat', {}, JSON.stringify(this.msg)); //发信息到/ws/chat服务器控制层方法
}