websocket--技术文档--spring后台+vue基本使用

news2024/11/25 23:18:55

阿丹:

        给大家分享一个可以用来进行测试websocket的网页,个人觉得还是挺好用的.

WebSocket在线测试工具

还有一个小家伙ApiPost也可以进行使用websocket的测试。

本文章只是基本使用--给大家提供思路简单实现!!

使用spring-boot建立一个服务端

在Spring Boot中使用WebSocket建立服务端,可以按照以下步骤进行:

  1. 确保的Spring Boot项目已经创建并配置好。
  2. 在项目的pom.xml文件中,添加WebSocket的依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 创建一个WebSocket配置类,用于配置WebSocket服务器。
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 {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler(), "/websocket/test/{sid}");
    }

    @Bean
    public MyHandler myHandler() {
        return new MyHandler();
    }
}
  1. 创建一个WebSocket处理器类(MyHandler),用于处理WebSocket消息。
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 处理接收到的文本消息
        System.out.println("Received message: " + message.getPayload());
    }

    @Override
    public void onOpen(WebSocketSession session) {
        // 连接建立成功调用的方法
        System.out.println("New client connected: " + session.getPrincipal());
    }
}
  1. 在需要使用WebSocket的地方,例如控制器类,注入WebSocketSession,并使用sendMessage方法发送消息。

以上就是在Spring Boot中使用WebSocket建立服务端的步骤。注意,还需要根据实际情况进行进一步的配置和开发。

使用spring-boot建立一个客户端

要使用Spring Boot建立一个客户端,可以按照以下步骤进行:

  1. 确保的Spring Boot项目已经创建并配置好。
  2. 在项目的pom.xml文件中,添加Spring WebSocket的依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 创建一个WebSocket配置类,用于配置WebSocket客户端。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocketClient;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketClientConfigurer;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;

@Configuration
@EnableWebSocketClient
public class WebSocketClientConfig implements WebSocketClientConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler(), "/websocket/test/{sid}");
    }

    @Bean
    public WebSocketClient myWebSocketClient() {
        return new StandardWebSocketClient();
    }

    @Bean
    public MyHandler myHandler() {
        return new MyHandler();
    }
}
  1. 创建一个WebSocket处理器类(MyHandler),用于处理WebSocket消息。
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        // 处理接收到的文本消息
        System.out.println("Received message: " + message.getPayload());
    }
}
  1. 创建一个用于发送消息的控制器类。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.social.connect.*;
import org.springframework.web.*;
import org.springframework.*;

import java.util.*;

@RestController("/")
@RequestMapping("/")
public class WebSocketController {

    @Autowired
    private SimpMessageSendingOperations operations;

    @Autowired
    private WebSocketConnectionEstablishedEvent event;

    public void setEvent(WebSocketConnectionEstablishedEvent event) {
        this.event = event;
    }

    @MessageMapping("/greet/{name}")
    @SendTo("/topic/greet")
    public String greet(@PathVariable String name) {
        return "Hello, " + name + "!";
    }

    @RequestMapping(value = "/error", produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String, Object> handleError(HttpServletRequest request) {
        Map<String, Object> model = new HashMap<>();
        model.put("timestamp", new Date());
        model.put("status", HttpStatusInitializer.__getHttpStatus(request, NullPointerException));
        model.put("error", "Internal Server Error");
        model.put("exception", NullPointerException.__toString());
        model.put("message", "Something bad happened, please try again!");
        model.put("path", request.__toString());
        return model;
    }

    @Autowired
    private WebSocketClient myWebSocketClient;

    @Autowired
    private MyHandler myHandler;

    @Autowired
    private ConnectionRepository connectionRepository;

    @Autowired
    private AuthenticationRepository authenticationRepository;

    public void sendMessageToUser(@PathVariable String name, @RequestParam String message) {
        Iterable<Connection<?, ?>> connections = connectionRepository.findConnections(String FacebookMarker.ID);
        for (Connection<?, ?> connection : connections) {
            if (connection.getProvider().getId().equals(String FacebookMarker.ID) && connection.getDisplayName().equals(name)) {
                connectionRepository.createSendToUserChannel(connection.getId()).send(MessageBuilder.withPayload(message).build());
                break;
            }
        }
    }
}

在上述代码中,我添加了一个sendMessageToUser方法,它使用connectionRepository查找与指定用户名匹配的连接,然后通过向该用户的个人通道发送消息来向该用户发送消息。请注意,这里假设您已经实现了与Facebook的连接,并且使用FacebookMarker作为提供者的标识符。可以根据需要进行相应的调整。

使用vue来订阅连接成为一个websocket客户端

要在Vue中订阅WebSocket连接并成为客户端,你可以按照以下步骤进行操作:

  1. 安装WebSocket库:首先,你需要下载并安装WebSocket库。你可以使用npm或yarn来安装。在终端中运行以下命令来安装webstomp-client库:
npm install webstomp-client
  1. 创建一个WebSocket连接:在Vue组件中,你需要创建一个WebSocket连接。你可以在组件的created()钩子函数中创建连接。以下是一个示例代码片段:
<template>
  <div>
    <!-- 组件内容 -->
  </div>
</template>

<script>
import WebSocket from 'webstomp-client';

export default {
  name: 'WebSocketClient',
  data() {
    return {
      socket: null,
    };
  },
  created() {
    this.initializeWebSocket();
  },
  methods: {
    initializeWebSocket() {
      this.socket = new WebSocket('wss://your-websocket-url'); // 使用你的WebSocket URL
      this.socket.onconnect = () => {
        console.log('WebSocket connected');
      };
      this.socket.onerror = (error) => {
        console.error('WebSocket error:', error);
      };
      this.socket.onclose = () => {
        console.log('WebSocket disconnected');
      };
      this.socket.onmessage = (message) => {
        console.log('Received message:', message);
      };
    },
  },
};
</script>

在上述代码中,我们首先导入WebSocket库,并在created()钩子函数中初始化WebSocket连接。你可以将wss://your-websocket-url替换为实际的WebSocket服务器URL。然后,我们定义了连接的回调函数,包括onconnectonerroroncloseonmessage。这些回调函数将在相应的WebSocket事件发生时执行。 3. 处理WebSocket消息:当从WebSocket接收消息时,你可以在onmessage回调函数中处理接收到的消息。你可以根据需要执行相应的操作,例如更新Vue组件的状态或触发其他行为。在上述示例代码中,我们只是简单地打印接收到的消息。 4. 发送WebSocket消息:要发送消息到WebSocket服务器,你可以使用WebSocket的send()方法。在Vue组件中,你可以定义一个方法来发送消息,并在需要发送消息时调用该方法。以下是一个示例代码片段:

<template>
  <div>
    <!-- 组件内容 -->
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
import WebSocket from 'webstomp-client';

export default {
  name: 'WebSocketClient',
  data() {
    return {
      socket: null,
    };
  },
  created() {
    this.initializeWebSocket();
  },
  methods: {
    initializeWebSocket() { /* ... */ }, // WebSocket连接初始化代码省略
    sendMessage() {
      const message = 'Hello, WebSocket Server!'; // 待发送的消息内容
      this.socket.send(message); // 发送消息到WebSocket服务器
    },
  },
};
</script>

在上述代码中,我们添加了一个按钮,并在点击时调用sendMessage()方法。该方法使用WebSocket的send()方法发送消息到服务器。请注意,你需要将实际的消息内容替换为'Hello, WebSocket Server!'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SNI代理与DNS解析相结合

在当今互联网时代&#xff0c;加密通信已成为保护用户隐私和数据安全的重要手段。而使用HTTPS协议进行加密传输更是日益普及。然而&#xff0c;在构建一个高效且灵活的HTTPS代理服务器时&#xff0c;我们常常面临着一些挑战。 针对这个问题&#xff0c;引入SNI&#xff08;Ser…

关于在本地启动跨域非nodejs的前后端分离项目

目前的前后端分离&#xff0c;dev开发模式下&#xff0c;本地启动时会首先启动一个nodejs作为服务器&#xff0c;把本地网页启动起来&#xff0c;同时对后端的接口请求&#xff0c;可以经过proxy来实现&#xff0c;从而避免了浏览器的跨域检查。 但是有些陈旧的基于jquerylayu…

【LeetCode-中等题】46. 全排列

文章目录 题目方法一&#xff1a;递归回溯 题目 这题中nums中的数各不相同&#xff0c;所以不需要去重&#xff1a; 而下面这题&#xff0c;nums中的数会存在重复值&#xff0c;就需要去重&#xff1a; 方法一&#xff1a;递归回溯 关键在于递归之后还要还原做回溯动作&#…

ToBeWritten之威胁狩猎

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

高并发下机器QPS计算、最佳线程数计算

一、QPS&#xff0c;每秒查询 QPS&#xff1a;Queries Per Second意思是“每秒查询率”&#xff0c;是一台服务器每秒能够相应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中&#xff0c;作为域名系统服务器的机器的性能经常…

macos13 arm芯片(m2) 搭建hbase docker容器 并用flink通过自定义richSinkFunction写入数据到hbase

搭建hbase docker容器 下载镜像 https://hub.docker.com/r/satoshiyamamoto/hbase/tags 点击run 使用镜像新建容器 填写容器名和 容器与宿主机的端口映射 测试 通过宿主机访问容器内的hbase webUI http://localhost:60010/master-status

WINGREEN 03ZSTI4-00-501

中央处理单元&#xff08;CPU&#xff09;支持&#xff1a;WINGREEN 03ZSTI4-00-501 控制主板模块可能配备了一个或多个CPU核心&#xff0c;用于处理数据和执行指令。 内存支持&#xff1a; 它可以支持系统内存&#xff08;RAM&#xff09;&#xff0c;以存储和访问数据。 输…

C语言共用体详解

文章目录 共用体解释代码说明小端存储 Little Endian共用体与小端存储为什么只能用第一个成员类型的值初始化一个共用体变量 共用体解释 共用体&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c; 它允许在同一个内存位置存储不同的数据类型。 共用体的所有成员共…

ICCOA蓝牙数字车钥匙2.0

近期&#xff0c;ICCOA智慧车联开放联盟宣布&#xff0c;由小米、vivo、OPPO、长安、深蓝、吉利、极氪、比亚迪、北汽、蔚来、零跑、雪球、瓶钵、融卡等企业联合参与制定的ICCOA蓝牙数字车钥匙2.0标准&#xff08;简称DK2.0&#xff09;&#xff0c;于2023年9月1日正式发布实施…

【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、MAC帧 1、IP地址和MAC地址的区别 2、MAC帧协议 3、MTU对IP协议的…

Python 3.x标准数据类型

文章目录 一、数字1.1 基本的数字类型有:1.2 整数数字表示方式二、字符串2.1 操作符2.2 格式化百分号format 格式化输出位置匹配2.3 字符串 索引和切片2.4 切片:字符串 [ 起始索引:终止索引:步长 ]字符串连接操作三、列表3.1 列表的定义3.2 常用方法(功能:增删改查)增删除…

S7-1200/1500增量式PID(输出归一化、支持PWM输出)

离散增量式PID算法公式请查看下面文章链接: 三菱PLC增量式PID算法FB(带死区设置和外部复位控制)_用三菱plc自己编写pid算法_RXXW_Dor的博客-CSDN博客关于PID废话不多说,各种位置式增量式资料和公式网上也非常多。PID从提出和发展目前已经一个世纪过去了,还在不断研究创新,…

使用Puppeteer构建博客内容的自动标签生成器

导语 标签是一种用于描述和分类博客内容的元数据&#xff0c;它可以帮助读者快速找到感兴趣的主题&#xff0c;也可以提高博客的搜索引擎优化&#xff08;SEO&#xff09;。然而&#xff0c;手动为每篇博客文章添加合适的标签是一件费时费力的工作&#xff0c;有时候也容易遗漏…

【SpringBoot应用篇】SpringBoot集成MinIO对象存储服务

【SpringBoot应用篇】SpringBoot集成MinIO对象存储服务 对象存储服务MinIOMinIO简介MinIO特点开箱使用docker安装启动管理控制台 快速入门Java 上传文件到minio配置访问权限 封装MinIO为starter创建模块zy-minio-starter配置类封装操作minIO类对外加入自动配置其他微服务使用 安…

好绝一数据可视化工具,零编程“BI+方案”

在一开始的时候&#xff0c;国外BI数据可视化工具的使用人群圈定在IT人员身上&#xff0c;所以我们可以看到国外BI数据可视化工具对使用者的IT技术要求较高&#xff0c;真正具有强烈数据分析需求的业务们反而无法按需分析。而现在&#xff0c;随着国产BI的崛起&#xff0c;面向…

Java线程概述 (二)线程实例演示

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;创建线程的三种方式&#x1f415;使用java.lang包下的Thread类&#x1fa85;实现Runnable接口&#x1f993;实现Callable接口 &#x1f415;synchronized简单介绍&#x…

Java手写数组队列和链表队列并使用java里面现成的队列方法

Java队列实现与常用使用方法介绍 说明使用数组手动实现队列功能使用单向链表手动实现队列功能Java中ArrayBlockingQueue和ArrayQueue和LinkedBlockingQueue使用ArrayQueue使用方法如下:ArrayBlockingQueue常用使用方法如下:LinkedBlockingQueue常用使用方法如下:ArrayBlockingQ…

Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例

目录 一.slf4j--日志 二.常用注解 2.1.RequestMapping 2.2.RequestParam 2.3.RequestBody 2.4.PathVariable 三.参数的传递 3.1 基础类型 3.2 复杂类型 3.3 RequestParam 3.4 PathVariable 3.5 RequestBody 3.6 增删改查 四.返回值 4.1 void 返回值 4.2 String 返…

用go实现dns请求

一、DNS报文格式详解 1.1 报文格式 DNS分为查询请求和查询响应&#xff0c;两者的报文结构基本相同。DNS报文格式如下表展示 0 1516 31事务ID&#…

CVE-2023-28303(截图修复)

在做羊城杯的misc的时候发现了一个图片&#xff0c;典型的图片高度不对&#xff0c;修改之后对图片的高度进行不断修改尝试&#xff0c;发现图片很大&#xff0c;但是内容没有出现&#xff0c; 从这里指知道存在feld文件x 截出zip文件内容&#xff0c;把04 03 改为03 04 这里的…