传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序

SpringBoot整合websocket实现及时通信聊天 线上演示地址:http://chat.breez.work 场景再现:构造函数如下所示: 例子如下: ??1.1.1 函数 1、 webSocket.send() 该函数用于向服务端发送一条消息,例子如下: 2、 webSocket.close() 该函数用于关闭客户端与服务端的连接,例子如下: ??1.1.2 事件 1、webSocket.onopen 该事件用于监听客户端与服务端的连接状态,如果客户端与服务端则该事件触发,例子如下: 2、webSocket.onclose 如果服务端与客户端连接断开,那 阅读详情
AI摘要

本文详细介绍了在SpringBoot环境下如何利用WebSocket实现客户端与服务器之间的双向实时通信,包括配置、开发及使用技巧。

小Hub领读:

通过websocket的两种使用方式,让你更加深入理解用法。很多人不懂websocket怎么辨别是谁发送过来的,文中说到实现WebSocketConfigurer接口,定义拦截器可以绑定用户信息,还有其他很多,细细品,对比看比较好!

文末有源码地址~

对了,看完记得点个[ 在看 ]支持一下哈。


作者:编码妙妙屋

https://www.skypyb.com/2019/02/jishu/java/813/

WebSocket 一次握手就可以使客户端和服务端建立长连接,并进行双向数据传输。

由于其双向传输特性,服务端可主动向客户端发送信息,实时性很高。

而与 HTTP 协议比起来 WebSocket 协议每次数据传输的头信息都较小,节约带宽。

在获取实时数据这方面时,那是比 ajax 轮询方式高到不知道哪去了。

在 SpringBoot 架构下进行 WebSocket 服务开发的话, 首先还是要导入这个

就算是使用 Tomcat 7 的 @ServerEndpoint 进行 WebSocket 开发, 也得导。不然在 SpringBoot 环境下会有 bug。

普通 java web 应用开发 WebSocket 就不需要了,@ServerEndpoint 直接用就行。

compile('org.springframework.boot:spring-boot-starter-websocket:2.0.4.RELEASE')

maven 仓库: spring-boot-starter-websocket

这是使用 @ServerEndpoint 进行的传统 WebSocket 开发:

由于我是在 SpringBoot 环境, 所以得先写个能扫描 @ServerEndpoint 的配置, 不然在客户端连接的时候会一直连不上。不是在 SpringBoot 下开发的可以跳过这一环节。

ServerEndpointExporter 这个类偏偏还是 spring-boot-starter-websocket 提供的。所以必须要导入这个依赖。

package com.skypyb.websocket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfigOne {
    /**
     * 这个bean会自动注册使用了@ServerEndpoint注解声明的对象
     * 没有的话会报404
     *
     * @return
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

@ServerEndpoint 注解中写上客户端连接的地址。

在类层次上, 还得加上 @Component 注解才行。普通 java web 项目不用加。

这个方式开发的 WebSocket 服务器,每个连接加入都会为该连接新建一个服务器对象绑定。

package com.skypyb.websocket;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
/**
 * @ServerEndpoint 该注解可以将类定义成一个WebSocket服务器端,
 * @OnOpen 表示有浏览器链接过来的时候被调用
 * @OnClose 表示浏览器发出关闭请求的时候被调用
 * @OnMessage 表示浏览器发消息的时候被调用
 * @OnError 表示报错了
 */
@ServerEndpoint("/ws/serverOne")
@Component
public class WebSocketServerOne {
    //concurrent包下线程安全的Set
    private static final CopyOnWriteArraySet<WebSocketServerOne> SESSIONS = new CopyOnWriteArraySet<>();
    private Session session;
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        SESSIONS.add(this);
        System.out.println(String.format("成功建立连接~ 当前总连接数为:%s", SESSIONS.size()));
        System.out.println(this);
    }
    @OnClose
    public void onClose() {
        SESSIONS.remove(this);
        System.out.println(String.format("成功关闭连接~ 当前总连接数为:%s", SESSIONS.size()));
    }
    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println(message);
    }
    @OnError
    public void onError(Session session, Throwable error) {
        System.out.println("发生错误");
        error.printStackTrace();
    }
    /**
     * 指定发消息
     *
     * @param message
     */
    public void sendMessage(String message) {
        try {
            this.session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 群发消息
     *
     * @param message
     */
    public static void fanoutMessage(String message) {
        SESSIONS.forEach(ws -> ws.sendMessage(message));
    }
}

这时,一个传统的 WebSocket 应用就开发完毕了。由于我是在 SpringBoot 下开发的,所以有一些调整。

启动应用后搞个普通的 html 页面直接本地打开就可以试验是否能够连接上了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webSocket</title>
    <style type="text/css">
    </style>
</head>
<body>
<h1>WebSocket Demo.</h1>
<h1>WebSocket Demo..</h1>
<h1>WebSocket Demo...</h1>
<input type="button" onclick="websocket.send('666666666')" value="点我发消息"/>
</body>
<script type="application/javascript">
    var websocket = {
        send: function (str) {
        }
    };
    window.onload = function () {
        if (!'WebSocket' in window) return;
        webSocketInit();
    };
    function webSocketInit() {
        websocket = new WebSocket("ws://127.0.0.1:8080/ws/serverOne");
        //成功建立连接
        websocket.onopen = function () {
            websocket.send("成功连接到服务器");
        };
        //接收到消息
        websocket.onmessage = function (event) {
            console.log(event.data)
        };
        //连接发生错误
        websocket.onerror = function () {
            alert("WebSocket连接发生错误");
        };
        //连接关闭
        websocket.onclose = function () {
            alert("WebSocket连接关闭");
        };
        //监听窗口关闭事件,当窗口关闭时,主动关闭websocket连接
        window.onbeforeunload = function () {
            websocket.close()
        };
    }
</script>
</html>

不过… 我既然都导入了 spring-boot-starter-websocket 依赖,自然最好还是用 SprinBoot 推荐的方法比较好。

这是使用 SpringBoot 的形式构建 WebSocket 应用程序:

这是核心配置类。实现 WebSocketConfigurer 接口实现它提供的注册方法。

这个方法就厉害了, 可以配置 websocket 入口,允许访问的域、注册 Handler、定义拦截器等等等等。

@EnableWebSocket 用于开启注解接收和发送消息

package com.skypyb.springboot_websocket;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.HandshakeInterceptor;
import java.util.Map;
@Configuration
@EnableWebSocket
public class WebSocketConfigTwo implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/ws/serverTwo")//设置连接路径和处理
                .setAllowedOrigins("*")
                .addInterceptors(new MyWebSocketInterceptor());//设置拦截器
    }
    /**
     * 自定义拦截器拦截WebSocket请求
     */
    class MyWebSocketInterceptor implements HandshakeInterceptor {
        //前置拦截一般用来注册用户信息,绑定 WebSocketSession
        @Override
        public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                       WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
            System.out.println("前置拦截~~");
            if (!(request instanceof ServletServerHttpRequest)) return true;
//            HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
//            String userName = (String) servletRequest.getSession().getAttribute("userName");
            String userName = "Koishipyb";
            attributes.put("userName", userName);
            return true;
        }
        @Override
        public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                   WebSocketHandler wsHandler, Exception exception) {
            System.out.println("后置拦截~~");
        }
    }
}

关于他这个拦截器, 是非常重要的,最好还是设置一个。他可以在连接进入到 Handler 处理时进行一些操作。

比如从 session 中拿出用户登陆信息作为唯一标识符等等…

我把我的拦截器实现写成内部类了,反正也没多少东西。这个配置注册的处理器和拦截器,都是只有一个的,无论你多少连接进来,都是用相同的对象处理。

那么就不好用传统的 WebSocket 开发那样用个集合类容器来存了。用前置拦截设置进去的某些唯一标识作为 key,session 作为 value 用键值对映射类容器来存储连接是比较好的方案。

推荐阅读:Github上最值得学习的100个Java开源项目,涵盖各种技术栈!

这是我实现的处理器, 也是 WebSocket 开发的核心:

需要实现 WebSocketHandler 接口, 该接口提供了五个方法。

  • 1、afterConnectionEstablished(): 建立新的 socket 连接后回调的方法。

  • 2、handleMessage(): 接收客户端发送的 Socket。

  • 3、handleTransportError(): 连接出错时,回调的方法。

  • 4、afterConnectionClosed(): 连接关闭时,回调的方法。

  • 5、supportsPartialMessages(): 这个是 WebSocketHandler 是否处理部分消息,没什么卵用 返回 false 就完事了。

package com.skypyb.springboot_websocket;
import org.springframework.web.socket.*;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MyWebSocketHandler implements WebSocketHandler {
    private static final Map<String, WebSocketSession> SESSIONS = new ConcurrentHashMap<>();
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        String userName = session.getAttributes().get("userName").toString();
        SESSIONS.put(userName, session);
        System.out.println(String.format("成功建立连接~ userName: %s", userName));
    }
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        String msg = message.getPayload().toString();
        System.out.println(msg);
    }
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.out.println("连接出错");
        if (session.isOpen()) {
            session.close();
        }
    }
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        System.out.println("连接已关闭,status:" + closeStatus);
    }
    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
    /**
     * 指定发消息
     *
     * @param message
     */
    public static void sendMessage(String userName, String message) {
        WebSocketSession webSocketSession = SESSIONS.get(userName);
        if (webSocketSession == null || !webSocketSession.isOpen()) return;
        try {
            webSocketSession.sendMessage(new TextMessage(message));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 群发消息
     *
     * @param message
     */
    public static void fanoutMessage(String message) {
        SESSIONS.keySet().forEach(us -> sendMessage(us, message));
    }
}

至此,SpringBoot 与 WebSocket 已经集成完了。客户端仍然使用我上边那个 HTML 文件就行,访问地址改一下就完事了。

我的这个 WebSocket 项目整体源码地址https://github.com/skypyb/codeDemo/tree/master/WebSocket


(完)

MarkerHub文章索引:(点击阅读原文直达)
https://github.com/MarkerHub/JavaIndex
【推荐阅读】
小白教程,Springboot项目搭建(前端到数据库,超详细)
Spring 和 Spring Boot 最核心的 3 大区别,详解!
就几条命令,一键学会Docker部署SpringBoot项目
使用 SpringBoot2.X 实现 Quartz 动态任务的分布式调度
从集成到ACK、消息重试、死信队列,Kafka你知多少?

好文!必须点赞

记一次接入websocket过程中@ServerEndpoint和@Scope(“prototype“)、@Autowire、@Postconstruct一起使用不生效的原因分析 阅读详情

相关推荐

springboot 配置 WebSocket 使用笔记

1、pom   核心是@ServerEndpoint这个注解。这个注解是Javaee标准里的注解,tomcat7以上已经对其进行了实现,如果是用传统方法使用tomcat发布项目,只要在pom文件中引入javaee标准即可使用。 <dependency> <groupId>javax</groupId> <artifact...

属于Alex的Java小世界 1216

@ServerEndpoint 注解的作用

@ServerEndpoint 注解的作用

weixin_43652507的博客 2万+

SpringBoot 使用WebSocket打造在线聊天室(基于注解)

推荐WebSocket的三大理由: 1、采用全双工通信,摆脱传统HTTP轮询的窘境。2、采用W3C国际标准,完美支持HTML5。3、简单高效,容易上手。 学习目标 快速学会通过WebSocket编写简单聊天功能。 快速查阅 专题阅读:《SpringBoot 布道系列》 温馨提示:1、WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速...

ITjianshuzhai的博客 881

@ServerEndpoint注解:2023最新分享,springboot中轻量级websocket

2023年最新分享@ServerEndpoint注解的使用,包含代码讲解,依赖导入。springboot内嵌websocket,轻量级应用,十分钟搞定

lzq2357639195的博客 1万+

SpringBoot之WebSocket消息推送

WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手...

十年代码写十年 375

Opencv计算相机响应函数(Camera Response Function)与Radiance

本文主要用于记录自己在学习CRF过程中遇到的一些问题。 CRF模型 I=f(V(t⋅L))I=f(V( t\cdot L))I=f(V(t⋅L)) 其中III为相机灰度值Intensity,LLL为环境中irradiance,ttt为曝光时间,VVV为相机镜头参数,fff为相机响应函数CRF。 有些论文中认为相机镜头参数是线性的不考虑,但有些考虑了衰减即靠近图像边缘亮度会暗一些,但没有看到二者同时计算的,如果同时计算两个非线性的函数,我觉得可能会有不确定性,在这里还请教一下了解的朋友。 控制

larrydong的博客 5999

websocket (@ServerEndpoint)基本使用指南

websocket (@ServerEndpoint)基本使用指南

墨鸦的博客 2万+

7-15 估值一亿的AI核心代码

函数封装,含一个字符串中的所有的某个字串全部替换成另一个的函数,还有判断是否独立的函数以上图片来自新浪微博。!

weixin_73529240的博客 601

serverendpoint注解_传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序...

小Hub领读:通过websocket的两种使用方式,让你更加深入理解用法。很多人不懂websocket怎么辨别是谁发送过来的,文中说到实现WebSocketConfigurer接口,定义拦截器可以绑定用户信息,还有其他很多,细细品,对比看比较好!文末有源码地址~对了,看完记得点个[ 在看 ]支持一下哈。作者:编码妙妙屋https://www.skypyb.com/2019/02/jish...

weixin_39637723的博客 1万+

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 898

滑模控制理论(SMC)概述

滑模控制理论(SMC)概述一、背景二、数学理论三、高维拓展四、分析 一、背景 滑模控制理论(Sliding Mode Control, SMC)是一种建立在现代控制理论基础上的控制理论,主要数学核心为李雅普诺夫函数。 滑模控制的核心思想是建立一个滑模面,将被控系统拉取到滑模面上来,使系统沿着滑模面运动。滑模控制的一个优势是无视外部扰动和不确定参数,采用一种比较“暴力”的方式达到控制的目的。 其思想和反步法有些类似,但数学实现起来更加方便而不抽象。相比反步法,滑模控制没有复杂的数学计算,也不会出现“微分爆炸”

高能阿博特的博客 6万+

java连不上websocket_传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序...

小Hub领读:通过websocket的两种使用方式,让你更加深入理解用法。很多人不懂websocket怎么辨别是谁发送过来的,文中说到实现WebSocketConfigurer接口,定义拦截器可以绑定用户信息,还有其他很多,细细品,对比看比较好!文末有源码地址~对了,看完记得点个[ 在看 ]支持一下哈。作者:编码妙妙屋https://www.skypyb.com/2019/02/jish...

weixin_36232899的博客 1162

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3051

SpringBoot6/springBoot集成WebSocket:实时通讯应用开发教程

SpringBoot6/springBoot是一个包含丰富SpringBoot知识点的Demo项目,每个子项目都聚焦于一个特定技能点,非常适合新手学习和开发者复习。本文将详细介绍如何在该项目中集成WebSocket,搭建实时通讯应用,让你快速掌握这一实用技术。 ## 什么是WebSocket?为什么选择它? WebSocket是一种在单个TCP连接上进行全双工通信的协议,能让客户端和服务器之间

gitblog_00711的博客 835

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

导读 本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。 背景介绍 在使用打印机或扫描仪扫描文档时,由于摆放位置差异难免造成扫描文档的倾斜。本文将使用OpenCV将倾斜的文档矫正水平并去除黑边。 实现步骤 本文只针对包含大部分文字的文档做倾斜矫正,思路来源是大部分文字倾斜后同一行的也在同一条直线,通过拟合直线计算文本倾斜角度,然后旋转来实现文本倾斜矫正。 详细步骤: ①加载倾斜图像 ②灰度转换+腐蚀+膨胀 ③Canny边缘检测 + 霍夫线变换检测直线 ...

Color Space的博客 3398

Flink实战案例(十三):Flink DataStream 八大分区策略与自定义分区器

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 分区策略决定了一条数据如何发送给下游。Flink中默认提供了八大分区策略(也叫分区器)。 本文基于Flink 1.9.0总结Flink DataStream中的八大分区策略以及手动实现一个自定义分区器。 八大分区策略继承关系图 ChannelSelector: 接口,决定将记录写入哪个Channel。有3个方法: void setup(int numberOfChannels):

微信搜:import_bigdata,大数据领域硬核原创作者 1124

@serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)

推荐WebSocket的三大理由:1、采用全双工通信,摆脱传统HTTP轮询的窘境。2、采用W3C国际标准,完美支持HTML5。3、简单高效,容易上手。学习目标快速学会通过WebSocket编写简单聊天功能。温馨提示: 1、WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器...

weixin_39856265的博客 1941

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 5999

SpringBoot集成WebSocket以及可能遇到的部分问题的解决方式

SpingBoot集成WebSocket步骤以及可能产生的问题的解决方法

qq_38589118的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...

websocketspringboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)使用WebSocket构建交互式Web应用程序 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消息。WebSocket是一个非常薄,轻量级的TCP层。它使得非常适合使用“子协议”来嵌入消息。在本指南中,我们将深入研究并使用Spr...

weixin_34738304的博客 676

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

太赞了,竟然用SpringBoot打造一款网页版的IM,进行聊天...

目录 传统 Tomcat 开发 WebSocket 回顾 SpringBoot 整合 Tomcat WebSocket websocket 通信测试 传统 Tomcat 开发 We...

Java笔记虾 1530

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

解决Springboot的WebSocket组件(即@ServerEndPoint)无法@Autowired的问题

最近有一个需求,前台使用WebSocket请求后台,后台给其他页面推送数据。 有这样的需求,势必要在我编写的WebSocket层去调用我的Service层去访问数据库,于是我就写出了如下的代码: @ServerEndpoint(value = "/websocket") @Component public class MyWebSocket { private static Con...

StartLine 1万+

springboot+websocket客户端和服务端

springboot框架下整合websocket客户端和服务端

cheng_long111的博客 1529

SpringBoot30-WebSocket 完整技术笔记

Override= null) {模块关键点连接建立使用共享 HttpSession用户识别从 HttpSession 获取登录用户,不要依赖消息体伪造身份消息路由通过 JSON 消息头区分广播/私聊,维护映射连接管理上线加入集合,下线移除,并广播状态变更异常处理捕获发送异常,清理无效连接,避免内存泄漏安全校验验证用户身份、消息内容合法性调试支持利用浏览器 DevTools 和服务端日志。

qq_31532983的博客 955

websocket

websocket是一种网络通信协议。全双工。弊端:HTTP协议无法实现服务器主动向客户端发起消息,

m0_56799642的博客 1504
上一篇: 缓存穿透、缓存并发、热点缓存之最佳招式
下一篇: 分享一套 SpringBoot+Vue 项目源码,有开发文档和视频!速度保存!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值