首页 > 其他分享 >SpringBoot建立websocket连接

SpringBoot建立websocket连接

时间:2024-03-21 17:04:41浏览次数:35  
标签:map java String void public import websocket 连接 SpringBoot

介绍

WebSocket 协议是一种基于TCP的协议,用于在客户端和服务器之间建立持久连接,并且可以在这个连接上实时地交换数据。WebSocket协议有自己的握手协议,用于建立连接,也有自己的数据传输格式。

当客户端发送一个 WebSocket 请求时,服务器将发送一个协议响应以确认请求。在握手期间,客户端和服务器将协商使用的协议版本、支持的子协议、支持的扩展选项等。一旦握手完成,连接将保持打开状态,客户端和服务器就可以在连接上实时地传递数据。

WebSocket 协议使用的是双向数据传输,即客户端和服务器都可以在任意时间向对方发送数据,而不需要等待对方的请求。它支持二进制数据和文本数据,可以自由地在它们之间进行转换。

总之,WebSocket协议是一种可靠的、高效的、双向的、持久的通信协议,它适用于需要实时通信的Web应用程序,如在线游戏、实时聊天等。

使用

导入依赖

        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.5.2</version>
        </dependency>

工具

package com.seekgenjs.position.util;


import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;


@SuppressWarnings("all")
@Component
public class WebSocketClient {

    Logger logger = LoggerFactory.getLogger(WebSocketClient.class);


    private final String URI = "wss://xxxx/wss";
    private final String User_Name = "xxx";
    private final String Act_Login = "xxx";
    private final String Act_Device = "xxxx";

    @Resource
    MyWebSocketClient myWebSocketClient;


    //项目启动建立连接
    @PostConstruct
    public void init() {

        try {
            URI uri = new URI(URI);
            org.java_websocket.client.WebSocketClient client = new org.java_websocket.client.WebSocketClient(uri) {
                @Override
                public void onOpen(ServerHandshake hand) {

                    logger.debug("{}_Connected to WebSocket server", URI);

                    send(login());

                    timer();

                }

                private void timer() {
                    // Send heartbeat packet every 30 seconds
                    logger.debug("{}_开始执行定时任务,Send heartbeat packet every 30 seconds", System.currentTimeMillis());

                    Timer timer = new Timer();
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            try {
                                //发送心跳的业务代码
                                send(sendHeartbeat());
                            } catch (Exception e) {
                                //print the error log
                                e.printStackTrace();
                            }

                        }
                    }, 1000L * 3, 1000L * 25);
                }

                @Override
                public void onMessage(String message) {
                    System.out.println(message);
                    handleMessage(message);
                }

                @Override
                public void onClose(int code, String reason, boolean remote) {
                    System.out.println("Connection closed");
                    logger.debug("{}_Connection closed", System.currentTimeMillis());
                }

                @Override
                public void one rror(Exception ex) {
                    ex.printStackTrace();
                }

            };
            client.connect();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }


    //登录
    private String login() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("act", Act_Login);
        map.put("user_name", User_Name);
        map.put("access_token", myWebSocketClient.getToken());
        return JSON.toJSONString(map);

    }

    //心跳包
    private String sendHeartbeat() {
        logger.debug("{}_Send heartbeat packet", System.currentTimeMillis());
        HashMap<String, Object> map = new HashMap<>();
        map.put("act", Act_Device);
        return JSON.toJSONString(map);
    }


    /**
     * 处理接收数据
     *
     * @param message
     */
    public void handleMessage(String message) {
        System.out.println("{}_Received message: " + message);
       
    }


}

标签:map,java,String,void,public,import,websocket,连接,SpringBoot
From: https://blog.csdn.net/weixin_46019392/article/details/136913322

相关文章

  • GraalVM详细安装及打包springboot、java、javafx使用教程(环境安装篇)
    下一篇:GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)GraalVM介绍GraalVM是一款由Oracle公司开发的一款具有高效性能、降低基础设施成本、支持Java发展、与其他编程语言无缝集成、创建本机镜像等优点的跨平台虚拟机。它支持多种编程语言,如J......
  • 如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发
    文章目录1.检查LinuxSSH服务2.本地连接测试3.Linux安装Cpolar4.创建远程连接公网地址5.公网远程连接测试6.固定连接公网地址7.固定地址连接测试本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接,然后实现远程......
  • MySQL下载安装与提供远程连接
    一、windowsmysql安装1、安装到 C:\mysql-8.0.31-winx642、根目录下添加配置文件my.ini[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]port=3306default-time-zone='+08:00'basedir=C:\mysql-8.0.31-winx64datadir=C:\m......
  • uniapp 蓝牙连接斑马打印机发送zpl指令打印
    历程需求是想通过斑马的zpl语言打印小票等,需要用到蓝牙连接。一开始采用的是uniapp自带的蓝牙连接和打印,用的是uni.writeBLECharacteristicValue(OBJECT)方法,蓝牙能正常连接和发送数据。奇怪的是发送蓝牙数据始终都是ok,打印机确是一点动静都没有。基于以上的疑惑,我开始怀疑是u......
  • 二 Superset通过API创建数据库连接和数据集
    Superset通过API创建数据库连接和数据集1登录Post登录http://localhost:8088/api/v1/security/loginBodyraw(json){"password":"123456","provider":"db","refresh":true,"username":"admi......
  • Springboot实现qq邮件的发送
    一、打开必要的邮件设置首先登录qq邮箱官网登录之后,在设置中将传输协议给打开,我们需要用这个秘钥作为发件人的邮箱授权。这里开启之后,记住这个秘钥。二、代码编写首先我们将作为发送邮件的账户信息写入配置文件。spring:mail:host:smtp.qq.comusername......
  • 【软考】关系代数篇(基础操作、关系公式、各种连接)
    【软考】关系代数篇一、关系代数简介二、五个基本运算1、选择(Selection):2、投影(Projection):3、连接(Join):4、并(Union):5、差(Difference):三、其他操作和表达式以及结果集1、笛卡尔积(CartesianProduct):2、交集(Intersection):3、除法(Division):4、自然连接(NaturalJoin):5、全连接(FullO......
  • springboot下postgresql指定schema问题
    首先明确用的postgresql版本是PostgreSQL9.5.25,compiledbyVisualC++build1800,64-bitspringboot是2.3.5.RELEASE。现有的文档提供的连接数据库配置方式是url:jdbc:postgresql://IP:端口/数据库名?currentSchema=模式名&stringtype=unspecified通常postgresq......
  • Vue.js+SpringBoot开发服装店库存管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1数据中心模块2.2角色管理模块2.3服装档案模块2.4服装入库模块2.5服装出库模块三、系统设计3.1用例设计3.2数据库设计3.2.1角色表3.2.2服装档案表3.2.3服装入库表3.2.4服装出库表四、系统展示五、核......
  • Vue.js+SpringBoot开发高校宿舍调配管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能需求2.1学生端2.2宿管2.3老师端三、系统展示四、核心代码4.1查询单条个人习惯4.2查询我的室友4.3查询宿舍4.4查询指定性别全部宿舍4.5初次分配宿舍五、免责说明一、摘要1.1项目介绍基于JAVA+Vue+Spring......