websocket在springboot+vue中的使用教程

下面是关于使用WebSocket在Spring Boot和Vue中的完整攻略。

WebSocket 在 Spring Boot 和 Vue 中的使用教程

什么是 WebSocket?

WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单、更便捷,且可以实现低延迟实时通信。

Spring Boot 中使用 WebSocket

在 Spring Boot 中使用 WebSocket 可以结合 Spring WebSocketSockJS 库实现。

在 Spring Boot 中,我们需要在应用程序中添加一个 Web Socket 配置类,该类要实现 WebSocketConfigurer 接口,然后在 registerWebSocketHandlers() 方法中注册一个 WebSocket 处理器。

示例:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

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

    @Bean
    public WebSocketHandler myHandler() {
        return new MyHandler();
    }

}

其中 MyHandler 是我们自己实现的 WebSocket 处理器。

Vue 中使用 WebSocket

在 Vue 中,我们可以使用 vue-native-websocket 库来实现 WebSocket 的功能。

我们需要在 Vue 应用程序中添加该库,然后在 created() 钩子中创建 WebSocket 连接。

示例:

import VueNativeSock from 'vue-native-websocket'

export default {
  created() {
    this.$options.sockets.onmessage = (data) => {
      console.log(data)
    }

    this.$options.sockets.onerror = (data) => {
      console.error(data)
    }
  },
  sockets: {
    reconnect: true,
    url: 'ws://localhost:8080/myHandler'
  }
}

完整示例

下面是一个完整的示例,演示如何在 Spring Boot 和 Vue 中使用 WebSocket 实现实时数据传输。

Spring Boot 示例中,我们创建了一个简单的 Greeting 类:

public class Greeting {

    private String content;

    public Greeting() {
    }

    public Greeting(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

然后我们创建了一个 WebSocket 处理器,它会在连接建立时向客户端发送一条欢迎信息,然后每隔 5 秒向客户端发送一条消息。

public class MyHandler extends WebSocketHandlerAdapter {

    private final Logger logger = LoggerFactory.getLogger(MyHandler.class);
    private static final String[] greetings = {"Hello, ", "Guten Tag, ", "Bonjour, ", "Hola, ", "Ciao, ", "こんにちは, ", "안녕하세요, "};

    private int count = 0;

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        int randomNum = ThreadLocalRandom.current().nextInt(greetings.length);

        String message = greetings[randomNum] + session.getId() + "!";

        session.sendMessage(new TextMessage(message));

        Runnable task = new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(5000);

                        String message = "You have received new message #" + count++;

                        session.sendMessage(new TextMessage(message));

                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        new Thread(task).start();

        logger.info("WebSocket连接已建立:{}", session.getId());

        super.afterConnectionEstablished(session);
    }

}

Vue 示例中,我们创建了一个简单的组件,它会在创建时创建一个 WebSocket 连接,并在接收到消息时将消息显示在页面上。

<template>
  <div class="message">
    <div>{{ message }}</div>
  </div>
</template>

<script>
import VueNativeSock from 'vue-native-websocket'

export default {
  created() {
    this.$options.sockets.onmessage = (data) => {
      console.log(data)
      this.message = data.data
    }

    this.$options.sockets.onerror = (data) => {
      console.error(data)
    }
  },
  data() {
    return {
      message: ''
    }
  },
  sockets: {
    reconnect: true,
    url: 'ws://localhost:8080/myHandler'
  }
}
</script>

最后我们在一个简单的页面中引入该组件:

<template>
  <div class="container">
    <h1>WebSocket 示例</h1>
    <message></message>
  </div>
</template>

<script>
import Message from './components/Message'

export default {
  components: {
    Message
  }
}
</script>

现在我们启动应用程序,并在浏览器中打开该页面,就可以看到实时消息的传递了。

总结

本文介绍了如何在 Spring Boot 和 Vue 中使用 WebSocket 实现实时数据传输。我们使用了 Spring WebSocket 和 SockJS 库在 Spring Boot 中创建 WebSocket 处理器,然后在 Vue 中使用 vue-native-websocket 库来创建 WebSocket 连接。最后,我们演示了一个完整的示例,它会每隔 5 秒向客户端发送一条消息,然后在客户端中将消息显示在页面上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:websocket在springboot+vue中的使用教程 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue实现在一个方法执行完后执行另一个方法的示例

    要实现在一个方法执行完后执行另一个方法,我们可以使用Vue的生命周期函数或者watch来实现。 利用Vue的生命周期函数 Vue提供了许多生命周期函数,其中mounted是一个在组件挂载后执行的函数。我们可以在mounted中调用第一个方法,然后在该方法中的异步操作完成后,再执行第二个方法。 示例代码如下: <template> <div&…

    Vue 2023年5月28日
    00
  • Vue3 – setup script的使用体验分享

    下面我将为你详细讲解“Vue3 – setup script的使用体验分享”的完整攻略。 1. 什么是Vue3 setup script? Vue3的setup script即组件选项中新增的setup函数。这个函数会在组件被创建之前执行,并且返回值将会被传递给模板和其他组件选项中的方法。 setup函数可以方便的访问组件实例,并且可以使用非响应式的引用,避…

    Vue 2023年5月28日
    00
  • 详解vue数据渲染出现闪烁问题

    让我们来详细讲解如何解决 Vue 数据渲染出现闪烁问题。 什么是 Vue 数据渲染出现闪烁问题 当 Vue 数据进行数据渲染时,我们可能会发现数据在渲染完毕后出现了短暂的闪烁问题,这个问题主要由于下面两个原因造成的: 在 mounted 钩子中执行 Ajax 请求或调用第三方的 API,页面需要等数据加载完毕才会显示,所以就会出现闪烁效果。 在 mounte…

    Vue 2023年5月28日
    00
  • Vue简单封装axios网络请求的方法

    下面是“Vue简单封装axios网络请求的方法”的完整攻略。 1. 确认项目中axios库的使用 在使用Vue封装axios网络请求之前,需要先确认项目中是否已经引入axios库。如果没有引入,则需要在项目中安装axios: npm install axios –save 如果已经引入了axios库,则可以直接开始Vue封装axios网络请求的操作。 2.…

    Vue 2023年5月28日
    00
  • 学习 Vue.js 遇到的那些坑

    学习Vue.js遇到的坑可以总结为以下几点: 1. 环境搭建 Vue.js是基于Vue-cli脚手架搭建的,我们需要先安装Node.js和npm,然后通过npm安装Vue-cli。在使用Vue-cli创建项目时,需要选择不同的模板,如Webpack、Browserify等。选择合适的模板会影响到后续的开发和打包。 示例: 安装Vue-cli命令: npm i…

    Vue 2023年5月28日
    00
  • Vuejs开发环境搭建及热更新【推荐】

    Vuejs开发环境搭建及热更新攻略 1. 安装Node.js和npm 在开始Vuejs的开发之前,我们需要先安装Node.js。这是一款基于Chrome V8引擎的JavaScript运行环境。 在安装Node.js的时候,会自动安装npm,npm是一个可以解决Node.js插件之间依赖的包管理器。可以通过这个命令来检查是否安装成功: node -v //查…

    Vue 2023年5月28日
    00
  • 详解vue axios二次封装

    下面是“详解vue axios二次封装”的完整攻略。 一、为什么需要封装axios? 在Vue应用中发起网络请求,一般会选择使用axios库。因为axios具有一系列强大的功能,比如:支持Promise,支持取消请求,拦截请求和响应,自动转换JSON格式等。但是,如果我们直接使用axios,会有一些不方便的地方,比如:每个请求都需要设置baseUrl、每个请…

    Vue 2023年5月28日
    00
  • vue项目中的public、static及指定不编译文件问题

    在Vue项目中,public、static以及指定不编译文件是比较重要的概念,下面我将详细讲解这些概念。 public 文件夹 public文件夹是一个特殊的目录,其中的文件会在打包时被直接拷贝到输出目录(dist)下,不经过编译。因此,在public文件夹中添加的文件不会被Vue进行webpack构建的过程处理,最终输出的结果会直接使用这些文件,适用于一些…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部