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日

相关文章

  • Vue3响应式方案及ref reactive的区别详解

    Vue3是Vue框架的下一个版本,相较于Vue2,Vue3提供了全新的响应式方案,通过reactive和ref两种API来实现响应式数据绑定。在本文中,我将详细讲解Vue3响应式方案及ref和reactive的区别并提供两个示例,帮助大家更加深入的了解Vue3。 Vue3响应式方案 Vue3的响应式方案是通过Proxy实现的,这种方式相比于Vue2使用的Ob…

    Vue 2023年5月28日
    00
  • vue项目中封装echarts的优雅方式分享

    封装ECharts是Vue项目中常见的做法,使得我们可以更方便的使用ECharts来展示数据。下面是我分享的完整攻略。 第一步:安装和引入ECharts 我们需要先安装ECharts,并将它引入到我们的Vue项目中。 npm install echarts –save-dev 然后,在我们需要使用ECharts的组件中,引入ECharts。 import …

    Vue 2023年5月27日
    00
  • Vue实现步骤条效果

    下面是Vue实现步骤条效果的完整攻略: 第一步:创建Vue实例 首先我们需要创建一个Vue实例,可以使用Vue CLI进行快速创建。如果不用Vue CLI,则需要手动引入Vue.js的JS文件。 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></sc…

    Vue 2023年5月29日
    00
  • 详解Vue生命周期和MVVM框架

    让我详细讲解”详解Vue生命周期和MVVM框架”的完整攻略。 首先,让我们来了解一下Vue生命周期。Vue组件有8个生命周期钩子函数,可以在Vue组件的生命周期中执行一些操作。 组件实例的生命周期可以分为四个阶段:创建、挂载、更新、销毁。下面是Vue生命周期的详细解释: 创建 beforeCreate:在实例初始化之后,数据观测(data observer)…

    Vue 2023年5月28日
    00
  • 在Vue3项目中使用如何echarts问题

    集成echarts到Vue3项目中 首先我们需要安装echarts库和vue-echarts库,打开命令行输入以下命令: npm install echarts vue-echarts 在Vue3项目中以组件的形式使用echarts,需要在组件中引入以下代码: import ECharts from ‘vue-echarts’ import ‘echarts…

    Vue 2023年5月27日
    00
  • vue+koa2搭建mock数据环境的详细教程

    介绍一下“vue+koa2搭建mock数据环境的详细教程”。 简介 在开发过程中,经常需要测试前端页面与后端接口之间的数据交互,而真正的接口并不一定已经实现,这时候我们往往需要使用 mock 数据模拟真实数据。本教程将介绍如何使用 vue 和 koa2 框架搭建一个 mock 数据环境。 步骤 1. 安装 vue-cli 和 koa-generator 首先…

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

    Vue二次封装axios流程详解 在Vue项目中,我们通常会使用axios进行网络请求。为了提高开发效率和代码复用性,我们可以对axios进行二次封装,使其更贴合项目需求。下面将详细讲解Vue二次封装axios的流程。 步骤一:创建axios实例 我们先在一个标准的Vue项目中安装axios库,然后在src目录下新建utils文件夹,用于存放我们的axios…

    Vue 2023年5月28日
    00
  • js简单获取表单中单选按钮值的方法

    下面我来详细讲解 “js简单获取表单中单选按钮值的方法”。 1. HTML部分 首先,我们需要在HTML代码中定义一个表单,并在表单内部添加一个单选框。例如,我们可以在表单中添加两个单选框,分别用于选择“男性”和“女性”,代码如下所示: <form> <label> <input type="radio" n…

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