SpringBoot集成WebSocket的两种方式

这篇具有很好参考价值的文章主要介绍了SpringBoot集成WebSocket的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本站在2014年4月时曾全面的学习HTML5的技术,特写过HTML5的WebSocket示例,当时使用的Servlet3.0规范中的API,需要Tomcat7的支持(貌似在Tomcat6的后期维护版本也增加了WebSocket的支持),早在当初该示例还是本站的一个特色功能,好多来找我要源码的呢。时隔多年再来使用SpringBoot架构来体验一下集成WebSocket的实现,经过一番资料的百科大概有找到使用两种方式的实现,我分别对它们进行了实践,所以我称这两种方式为JDK内置版和Spring封装版。

1.JDK内置版

主要是使用javax.websocket包下的注解进行集成,主要有:ServerEndpoint、OnOpen、OnMessage、OnClose、OnError相关的类和注解来集成,整体上比较简单,都是基于注解定义的方法来声明的,参考如下代码所示:

JdkWebSocket

package cn.chendd.websocket.jdk;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
 * websocket实现
 *
 * @date 2023/6/2 21:02
 */
@Component
@ServerEndpoint(value = "/websocket/jdk")
public class JdkWebSocket {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("WebSocketConfig.onOpen");
    }

    @OnMessage
    public void onMessage(Session session , String message) {
        System.out.println("WebSocketConfig.onMessage-->" + session + "--->" + message);
    }

    @OnClose
    public void onClose() {
        System.out.println("WebSocketConfig.onClose");
    }

    @OnError
    public void onError(Session sesison , Throwable throwable) {
        System.out.println("WebSocketConfig.onError-->" + sesison + "--->" + throwable);
    }

}

JdkWebSocketConfig

package cn.chendd.websocket.jdk;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @author chendd
 * @date 2023/6/2 21:15
 */
@Configuration
public class JdkWebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }

}

运行结果

SpringBoot集成WebSocket的两种方式,个人博客,经验分享,spring boot,websocket,个人博客,www.chendd.cn,java

2.Spring封装版

Spring封装版本有对于消息类型进行封装,提供了更加全面的WebSocket方面的API,值得深入分析。

SpringWebSocketHandler

package cn.chendd.websocket.spring;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

/**
 * SpringWebSocketHandler
 *
 * @author chendd
 * @date 2023/6/2 22:08
 */
@Component
public class SpringWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        super.afterConnectionEstablished(session);
        System.out.println("SpringWebSocketHandler.afterConnectionEstablished");
    }

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        super.handleMessage(session, message);
        System.out.println("SpringWebSocketHandler.handleMessage");
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        super.handleTextMessage(session, message);
        System.out.println("SpringWebSocketHandler.handleTextMessage");
    }

    @Override
    protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
        super.handlePongMessage(session, message);
        System.out.println("SpringWebSocketHandler.handlePongMessage");
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        super.handleTransportError(session, exception);
        System.out.println("SpringWebSocketHandler.handleTransportError");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        super.afterConnectionClosed(session, status);
        System.out.println("SpringWebSocketHandler.afterConnectionClosed");
    }

    @Override
    public boolean supportsPartialMessages() {
        System.out.println("SpringWebSocketHandler.supportsPartialMessages");
        return super.supportsPartialMessages();
    }
}

SpringWebSocketConfig

package cn.chendd.websocket.spring;
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;
import javax.annotation.Resource;

/**
 * SpringWebSocketConfig
 *
 * @author chendd
 * @date 2023/6/2 22:11
 */
@Configuration
@EnableWebSocket
public class SpringWebSocketConfig implements WebSocketConfigurer {

    @Resource
    private SpringWebSocketHandler springWebSocketHandler;

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

运行结果

 

SpringBoot集成WebSocket的两种方式,个人博客,经验分享,spring boot,websocket,个人博客,www.chendd.cn,java

3.其它说明

(1)本次示例重点在于服务端Java代码的示例,未编写前端示例,可在下方的项目源码中参见前端的HTML集成,或者是使用本例中使用的在线WebSocket测试的页面地址进行在线验证,右键查看其源代码也是原生的HTML5规范的相关代码;

(2)提供了JDK的内置版本和Spring的封装版本,个人推荐使用Spring的封装版,毕竟JDK的注解不够清晰的描述出被注解的方法的方法具体参数,而Spring封装版本有对于消息类型进行封装;

(3)代码比较简单,结合前文的《一个猜你所选的小程序随写》中的全量代码也包含在内,代码包结构如下:

SpringBoot集成WebSocket的两种方式,个人博客,经验分享,spring boot,websocket,个人博客,www.chendd.cn,java

(4)完整源码可见:原文

SpringBoot集成WebSocket的两种方式欢迎来到陈冬冬的个人经验分享平台https://www.chendd.cn/blog/article/1667515782887432194.html文章来源地址https://www.toymoban.com/news/detail-608528.html

到了这里,关于SpringBoot集成WebSocket的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot项目模块间通信的两种方式

    说明:在微服务架构开发中,一个请求是通过模块之间的互相通信来完成的,如下面这个场景: 创建两个子模块:订单模块(端口8081)、用户模块(端口8082),两个模块之间没有联系,现在需要查询订单,根据订单中的用户ID,查询该订单对应的用户信息。 (两个模块是独

    2024年02月15日
    浏览(47)
  • IDEA中使用Tomcat的两种方式:集成本地Tomcat&使用Tomcat Maven插件

    在IDEA中创建完一个Maven Web项目,并补齐了目录以后,准备使用Tomcat时,就需要在自己创建的项目中去部署Tomcat,前文已经介绍了如何创建Maven Web,所以这里就不多加赘述,直接讲述部署Tomcat的方法 这种方法比较复杂,但是非常适用于tomcat7以上的高版本,且一定不会报错 首先

    2023年04月08日
    浏览(55)
  • SpringBoot项目的两种发布方式(jar包和war包)

    1.1、在pom.xml中添加一个SpringBoot的构建的插件 1.2、在maven视图中,双击“package”,在target中会产生xxx.jar包 1.3、将生成的jar包复制到任意文件夹中,通过java -jar 命令运行该jar包 浏览器访问结果如下: 2.1、在pom.xml文件中将jar修改为war 2.2、设置tomcat启动器依赖范围 2.3、设置war包

    2024年01月17日
    浏览(59)
  • SpringBoot调用第三方WebService接口的两种实现方式

    WebService接口的发布通常一般都是使用WSDL(web service descriptive language)文件的样式来发布的,该文档包含了请求的参数信息,返回的结果信息,我们需要根据WSDL文档的信息来编写相关的代码进行调用WebService接口。接下来我将采用常见的两种方式调用WebService接口。 目前我需要

    2024年02月12日
    浏览(69)
  • Springboot之把外部依赖包纳入Spring容器管理的两种方式

    在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类,Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理,这样就可以使用@Autowired等注解,在需要使用bean的业务类中进行注入。这里起到关键作用的就是@ComponentScan,

    2024年02月14日
    浏览(48)
  • springboot 日志记录接口的请求参数和响应结果的两种方式-拦截器和切面(具体代码)

    springboot 日志记录接口的请求参数和响应结果的两种方式-拦截器和切面(具体代码) 前言:在生产中如果出现问题,我们想要查看日志,某个时间段用户调用接口的请求参数和响应的返回结果,通过日志来推测下用户当时做了什么操作。日志记录接口的请求参数和响应结果有利

    2024年02月02日
    浏览(64)
  • 53、springboot对websocket的支持有两种方式-------1、基于注解开发 WebSocket ,简洁实现多人聊天界面

    –注解就是: @OnOpen、 @OnClose 、 @OnMessage 、@OnError这些 ▲ Spring Boot为WebSocket提供了两种开发方式: 基于spring-boot-starter-websocket.jar开发WebSocket 基于Spring WebFlux开发WebSocket 两种方式对比: springboot API Socket:套接字。 插座。 在通信的两端分别建立虚拟的Socket(插座),网络协议

    2024年02月09日
    浏览(39)
  • SpringBoot集成websocket(3)|(websocket调用websocket采用回调方式实现数据互传)

    章节 第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现) 第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现) 本节主要介绍的是springboot实现websocket的客户端服务端,以及客户端与服务端的数据互传。以下为伪代码,业务逻辑删除导致不

    2024年02月12日
    浏览(51)
  • springboot 集成caffeine单体缓存两种方式及算法简介 (注解/手动)

           Caffeine 是基于 JAVA 8 的高性能缓存库。并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。        Caffeine 因为使用了  Window-TinyLFU  缓存淘汰策略,提供了一个 近乎最佳的命中率 。综合了 LRU 和 LFU 算法的长处,

    2024年02月03日
    浏览(45)
  • 【SpringBoot笔记37】SpringBoot基于@ServerEndpoint、@OnMessage等注解的方式集成WebSocket

    这篇文章,主要介绍SpringBoot基于@ServerEndpoint、@OnMessage等注解的方式集成WebSocket。 目录 一、基于注解集成WebSocket 1.1、WebSocket常见注解 1.2、创建WebSocket服务端

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包