手把手带你在springBoot下使用webSocke编写带参数的url接口

本文介绍了在SpringBoot项目中如何使用WebSocket,包括配置WebSocketConfig、编写TestController实现参数化的消息推送,以及TestService中的业务逻辑。通过@OnOpen、@OnClose、@OnMessage和@OnError注解处理连接建立、关闭、接收消息和错误情况,每3秒向客户端发送一次数据。
摘要由CSDN通过智能技术生成

在springBoot下的WebSocket的含有参数方法编写

前言:在上一篇中写了什么是WebSocket点击这里,这是介绍什么是websocket,本篇讲WebSocket如何使用,在本文中我们在springBoot的项目环境下使用webSocket。

1、项目结构基本结构

在这里插入图片描述

如上图所示,我们所需要的主要是以上三个文件

  • config文件主要是放WebSocketConfig配置文件,这文件主要是将websocket引入到项目中;

  • controller文件主要是放websocket编写的url接口信息

  • service文件主要是放业务信息。

    当然,这里只是简单的样例,如果需要读数据库等信息,那肯定要有mapper、Entity等文件夹及相关文件

2、具体操作步骤

这里主要是拿我以及运行的项目进行展示,当然部分内容进行了修改,注释应该是比较详细的,如果有问题,可以问我。

2.1 首先引入依赖

在pom.xml文件中加入以下信息方便引入依赖

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

2.2 编写配置文件

在 config文件夹中编写WebSocketConfig.java文件,用于开启WebSocket支持

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

// 开启WebSocket支持

@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

2.3 编写Controller文件

在controller文件夹中编写TestController.java文件,进行相关url接口信息的编写

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import websocket.service.TestService;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Timer;
import java.util.TimerTask;

/**

 * @Description
 * @Autor husir
 * @Date 2022/1/4  20:47
 * @Version 1.0
 **/
@Slf4j
@Component
@ServerEndpoint(value = "/test/ws/test/{id}")
public class TestController {

    public static TestService testService;

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

	//自动注入service业务文件,这个一定要写入进去
    @Autowired
    public void setBeltService(TestService testService) {
        TestController.testService=testService ;
    }
    

    @OnOpen
    public void onOpen(Session session,@PathParam("id") Integer id) {
        this.session = session;
        log.info("请求开始");
        try {
            sendData(id);
         
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @OnClose
    public void onClose() {
        log.info("用户退出");
        timer.cancel();
    }
//发送数据的核心函数
  public void sendData(@PathParam("id") Integer id) throws Exception {
      TestController testController =this;
       //问题出现在这,已经解决,注入问题
      timer =new Timer();
      timer.schedule(new TimerTask() {
          @Override
          public void run() {
              try {
              //调用service文件中的函数进行信息的调用
                  JSON object= testService.getBeltInfoById(id);
 //这一步是向前端发送信息,较为重要                 testController.session.getBasicRemote().sendText(object.toJSONString());
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      },0,3000); // 每隔3000单位发送一次

}
    // 收到客户端消息后调用的方法
    @OnMessage
    public void onMessage(String message, Session session) {
        log.info("用户消息: "+ message);

        if(StringUtils.isNotBlank(message)){
            try {
                System.out.println("TODO!");
                //解析发送的报文
                // JSONObject jsonObject = JSON.parseObject(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    // 出错时调用的方法
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("用户错误! 原因:" + error.getMessage());
        error.printStackTrace();
    }



}

这个文件的内容,webSocket协议方式的核心内容:

基本的逻辑信息是:

  • 首先我们需要注入service文件,

  • 使用@OnOpen注解去定义onOpen函数,当前端调用url的时候,首先会调用onOpen函数去确认连接,

  • 并调用其中的sendData函数调用service文件去给前端发送数据,sendData里面的testController.session.getBasicRemote().sendText(object.toJSONString());是用来给前端发信息。

  • 若收到前端发的消息会调用onMessage函数在后端显示,

  • 前端断开连接的时候会调用onClose函数

  • 出现错误调用onError函数

2.4 业务信息的编写

这一步是编写service文件中的TestService.java业务文件内容,主要是业务信息,业务信息根据自己的需要进行编写,在此展示一个样板

import com.alibaba.fastjson.JSON;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.PageFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;

/**

 * @Description
 * @Autor husir
 * @Date 2022/1/4  20:16
 * @Version 1.0
 **/
@Service
public class TestService {
    //注入需要的service文件,有几个service文件就需要加入几个 @Autowired
    @Autowired
    HBaseTemplate hBaseTemplate;
    @Autowired
    TestService testService;

    public JSON getBeltInfoById(Integer subEquipmentId) throws Exception {
 
        
        业务内容
        
        return (JSON) JSON.toJSON(MpInfos);
    }


}
在Visual Studio Code(VSCode)中使用Jupyter非常简单。以下是手把手教你如何在VSCode下使用Jupyter的步骤: 1. 首先,确保已经安装了VSCode和Python。如果你还没有安装VSCode,请先到官方网站下载并安装。 2. 在VSCode中,按下Ctrl + Shift + X或点击左侧面板的插件图标。在搜索框中输入"Jupyter"并选择Jupyter插件进行安装。 3. 安装完成后,点击左下角的齿轮图标选择"Jupyter",然后选择你想要使用的Python环境。如果你没有其他的Python环境,可以选择默认的Python解释器。 4. 在VSCode中,点击左侧面板的文件夹图标,选择一个文件夹作为你的工作区。通过点击"新建文件"按钮创建一个新的Jupyter笔记本文件(后缀为.ipynb)。 5. 在笔记本文件中,你可以使用Markdown语法编写文本说明,并在代码块中编写Python代码。在代码块中,点击"+"按钮或使用快捷键Shift + Enter执行代码。 6. 可以在工具栏中找到其他常用的Jupyter功能,如保存笔记本、插入新的代码块和重新运行代码等。 7. 此外,你可以通过点击右上角的"扩展视图"按钮打开Jupyter的交互式预览。预览窗口将显示已经执行的代码和输出结果,并支持在代码块中编辑并重新运行代码。 8. 当你完成了所有代码的编写和调试后,可以将Jupyter笔记本导出为其他格式,如HTML或PDF。点击菜单栏的"文件",选择"导出为",然后选择你想要的导出格式。 总结起来,在VSCode下使用Jupyter非常简单。安装Jupyter插件后,你只需要创建一个Jupyter笔记本文件,并在其中编写和执行代码即可。通过预览功能,你可以方便地查看代码的执行结果。希望这个回答能够帮助你在VSCode中使用Jupyter!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值