websocket点对点聊天

和服务器保存长连接,不是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服务器控制层方法
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章