首页 > 其他分享 >Springboot websocket简单使用

Springboot websocket简单使用

时间:2023-08-19 22:48:27浏览次数:47  
标签:websocket Springboot org springframework session void 简单 import public

1、在pom.xml导入依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-websocket</artifactId>
 </dependency>

2、在Spring Boot项目的service层中创建一个Host类,其中包含一个getCPUUsage()方法用于定时获取远程CentOS 7系统的CPU使用率。你可以使用JSch库来连接远程服务器,并执行相应的命令来获取CPU使用率。

import org.springframework.scheduling.annotation.Scheduled;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class Host {
    private Set<WebSocketSession> sessions = new HashSet<>();

    public void addSession(WebSocketSession session) {
        sessions.add(session);
    }

    public void removeSession(WebSocketSession session) {
        sessions.remove(session);
    }

    public void sendCPUUsageToAllSessions(double cpuUsage) throws IOException {
        for (WebSocketSession session : sessions) {
            session.sendMessage(new TextMessage(String.valueOf(cpuUsage)));
        }
    }

    @Scheduled(fixedRate = 1000) // 每秒执行一次
    public void getCPUUsage() throws JSchException, IOException {
        JSch jSch = new JSch();
        Session session = jSch.getSession("username", "hostname", 22);
        session.setPassword("password");
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        channel.setCommand("top -bn 1 | grep \"Cpu(s)\" | awk '{print $2 + $4}'");
        channel.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(channel.getInputStream()));
        String cpuUsageString = reader.readLine();
        double cpuUsage = Double.parseDouble(cpuUsageString);
        reader.close();

        channel.disconnect();
        session.disconnect();

        sendCPUUsageToAllSessions(cpuUsage);
    }
}

3、在Spring Boot项目中配置WebSocket,创建一个WebSocketHandler用于处理WebSocket连接、消息和关闭操作。

import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
    private final Host host;

    public MyWebSocketHandler(Host host) {
        this.host = host;
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        host.addSession(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 处理接收到的消息,如果需要的话
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        host.removeSession(session);
    }
}

4、在Spring Boot的配置类中配置WebSocket相关的Bean和路径映射。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    private final MyWebSocketHandler myWebSocketHandler;

    @Autowired
    public WebSocketConfig(MyWebSocketHandler myWebSocketHandler) {
        this.myWebSocketHandler = myWebSocketHandler;
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myWebSocketHandler, "/ws").setAllowedOrigins("*");
    }
}

5、在Spring Boot的启动类上加上@EnableScheduling

6、在你的Vue.js项目中,创建WebSocket连接并处理收到的消息。

socket.onmessage = (event) => {
        this.tableData = JSON.parse(event.data).data;
        // 处理接收到的CPU使用率数据
        console.log(this.tableData);
      };

通过以上步骤,你可以实现在Spring Boot的service层通过JSch定时获取远程CentOS 7系统的CPU使用率,并使用WebSocket主动发送给连接的Vue.js项目的页面。在Vue.js项目中,通过创建WebSocket连接并处理接收到的消息,即可实时接收并处理CPU使用率数据。请根据实际情况对代码进行适当修改和优化。记得在Spring Boot的启动类上加上@EnableScheduling注解启用定时任务。

 

标签:websocket,Springboot,org,springframework,session,void,简单,import,public
From: https://www.cnblogs.com/lfxx/p/17643278.html

相关文章

  • SpringBoot使用自定义注解实现数据脱敏
    我们在日常开发中,经常有一些数据中的部分需要隐藏起来,达到数据安全的目的,这一个过程就是数据脱敏。一、自定义数据脱敏枚举类packagecom.example.springbootdemo.enums;importlombok.Getter;importjava.util.function.Function;/***数据脱敏策略枚举*/@Getterpubli......
  • 社区版idea插件spring assistant开发springboot项目返回jsp
    最近了解到社区版idea没有专门的sringboot,网上网友提供支持说是springboot社区版有几种开发模式:springinitilizer:https://start.spring.io/在线创建springassistant插件支持(具体版本可以去github找)这次我选择第二种,然而在springboot开发返回jsp页面一直报错前端页面报错:后端控......
  • 学生成绩登录系统python(简单的登录)
    根据上课学的内容写一个学生登录系统登录成功后输入成绩操作100=优++90-99优80-90良好70-60一般50-60差50以下渣渣生其余分数为作弊行为#作业:根据上课学的内容写一个学生登录系统登录成功后#输入成绩操作100=优++90-99优80-90#良好70-60一般50-60差5......
  • 算法复杂度和简单排序
    选择排序和冒泡排序选择排序是O(n2),每次选取最大的,放在最前面,然后下次从第二个开始找到最后一个。冒泡也是O(n2),一直交换到最后。插入排序插入排序最坏是O(n2),最好是O(n),但是算法一般都是按照最坏的来。插入是先排序0-1,然后0-2,然后0-3,eq.:排序0-5时,0-4已经排序好了,只需要......
  • 剑指 Offer 55 - I. 二叉树的深度(简单)
    题目:classSolution{public:voidtraversal(TreeNode*cur,int&max,intdepth){//max用来记录最长路径长度,depth记录当前路径长度if(!cur)return;depth++;if(depth>max)max=depth;traversal(cur->left,max,depth);......
  • 基于SpringBoot的在线拍卖系统
    随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、留言板管理、系统管理,用户;首页、个人中心、历......
  • 两步实现springBoot导出带动态表格的word docx文档
    1.第一步导入poi依赖<!--ApachePOI--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>......
  • 基于springboot的医护人员排班系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足,创建了一个计算机管理医护人员排班系统的方案。文章介绍了医护人员排班系统的系统分析部分,包括可行性分析等,系统设......
  • 基于springboot图书个性化推荐系统的设计与实现
    本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述图书个性化推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分......
  • 基于springboot网页时装购物系统
    项目内容及可行性分析制作一个可以供消费者购买商品的网上购物平台,用户可以点击自己需要购买的商品,然后完成购买。该系统主要分为用户模块和管理员模块,用户模块主要关于系统的功能方面的使用,管理员模块则是专注于后台对于系统的维护与信息管理;用户模块具有:登陆、注册、商品查询、商......