项目总结(SpringBoot+MyBatis+WebSocket)

本文是对一个使用SpringBoot、MyBatis和WebSocket技术的项目进行的总结。介绍了WebSocket的使用,包括开启连接、关闭连接、发送消息的处理,以及在WebSocket中处理心跳重连的方法。此外,还涉及到查询每个分类第一条数据的技巧,字符串转Json数组,时间与时间戳的处理,Switch case的运用,分页查询的实现,以及Echart图形的构建方法。
摘要由CSDN通过智能技术生成

项目初版本已经告一段落,总结一下以作经验。

一、WebSocket

关于WebSocket也是首次接触的。WebSocket是作为服务端和客户端双向通信的,常用于多人聊天功能和监听数据库,即数据库有更新就推送数据至前端。本次项目就是运用WebSocket实现数据库有更新就推送数据至前端的功能,其中还有心跳重连机制。

关于WebSocket本次项目了解的也不深,主要是写了一个页面,其中包括@Onopen(开启连接的操作),@OnClose(连接关闭的操作),@OnMessage(发送消息的操作),@OnError(出错的操作)。

开启连接的时候,一般先会给客户端发送数据,如果是监听数据库的话,可以在开启连接的时候开启线程,通过比对数据库监听数据库,如果有后端操作数据库的话可以直接发送数据,不用监听数据库。

关闭连接的时候要记得remove连接。

onMessage的时候可以对接收的数据进行分类处理,一方面接收客户端(服务端)发送的消息,处理给前端发送最新数据;另一方面接收客户端发送的心跳,返回连接信息。剩下的都是自定义方法了。

webSocket代码:

@ServerEndpoint(value = "/websocket")
@Component
public class WebSocketServlet {

    private DeviceLastDataService deviceLastDataService= (DeviceLastDataService)ApplicationContextUtils.getBeanByName("DeviceLastDataService");

    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    //用来存放每个客户端对应的MyWebSocket对象
    private static CopyOnWriteArraySet<WebSocketServlet> webSocketSet = new CopyOnWriteArraySet<WebSocketServlet>();
    private Session session = null;
    /*
    开启连接的操作
     */
    @OnOpen
    public void onOpen(Session session) throws IOException {
        this.session = session;
        webSocketSet.add(this);
        System.out.println(webSocketSet);
        try{
            sendMessage();
        }catch (IOException e){
            e.printStackTrace();
        }

    }

    /*
    连接关闭的操作
     */
    @OnClose
    public void onClose(){
        webSocketSet.remove(this);
    }

    /*
    给服务器发送消息告知数据库的变化
     */
    @OnMessage
    public void onMessage(String message){
        if(isTimestamp(message)){
            System.out.println("发生变化的时间:"+message);
            try{
                sendNewMessage(message);
            }catch (IOException e){
                e.printStackTrace();
            }
        }else{
            System.out.println("接收到客户端:"+session.getId()+"发送的消息"+message);
            try{
                session.getBasicRemote().sendText("heartbeat");//返回心跳信息
            }catch (IOException e){
                e.printStackTrace();
            }
        }


    }


    /*
    出错的操作
     */
    @OnError
    public void onError(Throwable error){
        System.out.println(error);
        error.printStackTrace();
    }

    /*
    自定义的方法,告诉前台数据库发生改变的数据
     */
    public void sendMessage() throws IOException{
        List<WarningResult> warningResults = deviceLastDataService.getWarnDeviceInfo();
        JSONArray array=JSONArray.fromObject(warningResults);
        String WarningData = array.toString();
        session.getBasicRemote().sendText(WarningData);
    }

    /*
    自定义的方法,告诉前台数据库最新发生改变的数据
     */
    public void sendNewMessage(String currentTime) throws IOException{
        List<WarningResult> warningResults = deviceLastDataService.getLastWarnDevice(currentTime);
        JSONArray array=JSONArray.fromObject(warningResults);
        String WarningData = array.toString();
        //群发消息
        for(WebSocketServlet item: webSocketSet){
            item.session.getBasicRemote().sendText(WarningData);
        }
    }

    public boolean isTimestamp(String str){
        boolean convertSuccess = true;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            format.setLenient(false);
            format.parse(str);
        }catch (ParseException e){
            convertSuccess = false;
        }
        return convertSuccess;

    }


}

后端更新数据库的代码:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值