消息推送springboot+websocket简单demo

这里为了方便,使用springboot实现。模板引擎使用thymeleaf(默认)。

springboot+websocket demo下载:https://gitee.com/chen_jia_hao/websocket

1、Intellj Idea 创建新的springboot项目。

可参考下面部分截图:

消息推送springboot+websocket简单demo_第1张图片

消息推送springboot+websocket简单demo_第2张图片

消息推送springboot+websocket简单demo_第3张图片

整个demo结构如下所示:

消息推送springboot+websocket简单demo_第4张图片

2、配置类,需配置如下,方可使用websocket。

package com.cjh.websocket.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @author chen jia hao
 */
@Configuration
public class WebConfig {
    /**
     * 支持websocket
     * 如果不使用内置tomcat,则无需配置
     * @return
     */
    @Bean
    public ServerEndpointExporter createServerEndExporter(){
        return new ServerEndpointExporter();
    }
}

3、websocket服务端处理类(核心)

package com.cjh.websocket.controller;

import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * websocket服务端
 * @author chen jia hao
 */
@Component
@ServerEndpoint(value = "/myWebSocket")
public class MyWebSocket {

    //用来存放每个客户端对应的MyWebSocket对象
    private static CopyOnWriteArraySet user = new CopyOnWriteArraySet();

    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;

    @OnMessage
    public void onMessage(String message,Session session) throws IOException {

        //群发消息
        for (MyWebSocket myWebSocket : user) {
            myWebSocket.session.getBasicRemote().sendText(session.getId()+"说:"+message);
            //myWebSocket.session.getBasicRemote().sendText("");
        }
    }

    @OnOpen
    public void onOpen(Session session){
        System.out.println(session.getId()+" open...");
        this.session = session;
        user.add(this);
    }
    @OnClose
    public void onClose(){
        System.out.println(this.session.getId()+" close...");
        user.remove(this);
    }

    @OnError
    public void onError(Session session,Throwable error){
        System.out.println(this.session.getId()+" error...");
        error.printStackTrace();
    }

}

4、前台界面,聊天测试



    
    测试
    


6、demo效果图:

消息推送springboot+websocket简单demo_第5张图片

 

你可能感兴趣的:(spring)