广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot怎么使用WebSocket实现群发消息
  • 120
分享到

SpringBoot怎么使用WebSocket实现群发消息

2023-06-08 04:06:11 120人浏览 独家记忆
摘要

这篇文章主要介绍了SpringBoot怎么使用websocket实现群发消息的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot怎么使用WEBSocket实现群发消息文章都会有所收获,下面我们一起

这篇文章主要介绍了SpringBoot怎么使用websocket实现群发消息的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot怎么使用WEBSocket实现群发消息文章都会有所收获,下面我们一起来看看吧。

WebSocket 是一种在单个 tcp 连接上进行全双工通信的协议,已被 W3C 定为标准。使用 WebSocket 可以使得客户端和服务器之间的数据交换变得更加简单。在 WebSocket 协议中,浏览器和服务器只需要完成一次握手,两者之间就可以直接创建持久性的连接,并进行双向数据传输。

SpringBoot怎么使用WebSocket实现群发消息

特点

  • WebSocket 使用时需要先创建连接,这使得 Websocket 成为一种有状态的协议,在之后的通信过程中可以省略部分状态信息(例如身份认证等)。

  • WebSocket 连接在端口 80(ws)或者 443(wss)上创建,与 Http 使用的端口相同,这样,基本上所有的防火墙都不会阻止 WebSocket 连接。

  • WebSocket 使用 HTTP 协议进行握手,因此它可以自然而然地集成到网络浏览器和 HTTP 服务器中,而不需要额外的成本。

  • 心跳消息(ping 和 pong)将被反复的发送,进而保持 WebSocket 连接一直处于活跃状态。

  • 使用该协议,当消息启动或者到达的时候,服务端和客户端都可以知道。

  • WebSocket 连接关闭时将发送一个特殊的关闭消息。

  • WebSocket 支持跨域,可以避免 ajax 的限制。

  • HTTP 规范要求浏览器将并发连接数限制为每个主机名两个连接,但是当我们使用 Websocket 的时候,当握手完成之后,该限制就不存在了,因为此时的连接已经不再是 HTTP 连接了。

  • WebSocket 协议支持扩展,用户可以扩展协议,实现部分自定义的子协议。

  • WebSocket 拥有更好的二进制支持以及更好的压缩效果。

一、添加依赖

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-websocket</artifactId></dependency>

二、配置 WebSocket

Spring 框架提供了基于 WebSocket 的 STOMP 支持,STOMP 是一个简单的可互操作的协议,通常被用于通过中间服务器在客户端之间进行异步消息传递。

@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer {     @Override    public void configureMessageBroker(MessageBrokerReGIStry config) {        // 设置消息代理的前缀,如果消息的前缀为"/topic",就会将消息转发给消息代理(broker)        // 再由消息代理广播给当前连接的客户端        config.enableSimpleBroker("/topic");        // 下面方法可以配置一个或多个前缀,通过这些前缀过滤出需要被注解方法处理的消息。        // 例如这里表示前缀为"/app"的destination可以通过@MessageMapping注解的方法处理        // 而其他 destination(例如"/topic""/queue")将被直接交给 broker 处理        config.setApplicationDestinationPrefixes("/app");    }     @Override    public void registerStompEndpoints(StompEndpointRegistry registry) {        // 定义一个前缀为"/chart"的endpoint,并开启 sockjs 支持。        // sockjs 可以解决浏览器对WebSocket的兼容性问题,客户端将通过这里配置的URL建立WebSocket连接        registry.addEndpoint("/chat").withSockJS();    }}

三、服务端代码

根据上面 WebSocketConfig 的配置,@MessageMapping("/hello") 注解的方法将用来接收“/app/hello”路径发送来的消息,在注解方法中对消息进行处理后,再将消息转发到 @SendTo 定义的路径上。而 @SendTo 路径是一个前缀为“/topic”的路径,因此该消息被交给消息代理 broker,再由 broker 进行广播。

@Controllerpublic class DemoController {    @MessageMapping("/hello")    @SendTo("/topic/greetings")    public Message greeting(Message message) throws Exception {        return message;    }}
@Datapublic class Message {    private String name;        private String content;}

四、前端代码 

在 resources/static 目录下创建 chat.html 页面作为聊天页面。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>群聊</title>    <script src="https://cdn.bootcdn.net/ajax/libs/Jquery/3.3.1/jquery.min.js"></script>    <script src="https://cdn.bootcdn.net/ajax/libs/sockjs-client/1.1.2/sockjs.min.js"></script>    <script src="https://cdn.bootcdn.net/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>    <script>        var stompClient = null;        // 根据是否已连接设置页面元素状态        function setConnected(connected) {            $("#connect").prop("disabled", connected);            $("#disconnect").prop("disabled", !connected);            if (connected) {                $("#conversation").show();                $("#chat").show();            }            else {                $("#conversation").hide();                $("#chat").hide();            }            $("#greetings").html("");        }        // 建立一个WebSocket连接        function connect() {            // 用户名不能为空            if (!$("#name").val()) {                return;            }            // 首先使用 SockJS 建立连接            var socket = new SockJS('/chat');            // 然后创建一个STOMP实例发起连接请求            stompClient = Stomp.over(socket);            // 连接成功回调            stompClient.connect({}, function (frame) {                // 进行页面设置                setConnected(true);                // 订阅服务端发送回来的消息                stompClient.subscribe('/topic/greetings', function (greeting) {                    // 将服务端发送回来的消息展示出来                    showGreeting(JSON.parse(greeting.body));                });            });        }        // 断开WebSocket连接        function disconnect() {            if (stompClient !== null) {                stompClient.disconnect();            }            setConnected(false);        }        // 发送消息        function sendName() {            stompClient.send("/app/hello",                {},                JSON.stringify({'name': $("#name").val(),'content':$("#content").val()}));        }        // 将服务端发送回来的消息展示出来        function showGreeting(message) {            $("#greetings")                .append("<div>" + message.name+":"+message.content + "</div>");        }        // 页面加载后进行初始化动作        $(function () {            $( "#connect" ).click(function() { connect(); });            $( "#disconnect" ).click(function() { disconnect(); });            $( "#send" ).click(function() { sendName(); });        });    </script></head><body><div>    <label for="name">请输入用户名:</label>    <input type="text" id="name" placeholder="用户名"></div><div>    <button id="connect" type="button">连接</button>    <button id="disconnect" type="button" disabled="disabled">断开连接</button></div><div id="chat" >    <div>        <label for="name">请输入聊天内容:</label>        <input type="text" id="content" placeholder="聊天内容">    </div>    <button id="send" type="button">发送</button>    <div id="greetings">        <div id="conversation" >群聊进行中...</div>    </div></div></body></html>
  • SockJS 是一个浏览器javascript库,提供类似于WebSocket的对象。SockJS为您提供了一个一致的,跨浏览器的Javascript api,该API在浏览器和Web服务器之间创建了低延迟,全双工,跨域的通信通道。

  • STOMP 即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。

  • @SendTo 注解,该注解将方法处理过的消息转发到 broker,再由 broker 进行消息广播。

五、验证结果

我们请求地址:http://127.0.0.1:8086/chat.html

登录用户:piao

SpringBoot怎么使用WebSocket实现群发消息

登录用户:admin

SpringBoot怎么使用WebSocket实现群发消息

关于“SpringBoot怎么使用WebSocket实现群发消息”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SpringBoot怎么使用WebSocket实现群发消息”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: SpringBoot怎么使用WebSocket实现群发消息

本文链接: https://www.lsjlt.com/news/251798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot怎么使用WebSocket实现群发消息
    这篇文章主要介绍了SpringBoot怎么使用WebSocket实现群发消息的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么使用WebSocket实现群发消息文章都会有所收获,下面我们一起...
    99+
    2023-06-08
  • SpringBoot中怎么使用WebSocket实现点对点消息
    本篇内容介绍了“SpringBoot中怎么使用WebSocket实现点对点消息”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、添加依赖,配...
    99+
    2023-06-08
  • springboot怎么集成websocket实现消息推送
    要在Spring Boot中集成WebSocket实现消息推送,可以按照以下步骤进行操作: 添加依赖:在`pom.xml`文件中添...
    99+
    2023-10-26
    springboot websocket
  • SpringBoot如何使用WebSocket实现点对点消息
    这篇文章主要介绍“SpringBoot如何使用WebSocket实现点对点消息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何使用WebSocket实现点对点消息”文章能帮助大...
    99+
    2023-07-06
  • SpringBoot怎么整合WebSocket实现后端向前端发送消息
    这篇文章主要讲解了“SpringBoot怎么整合WebSocket实现后端向前端发送消息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么整合WebSocket实现后端向...
    99+
    2023-07-05
  • springboot 使用websocket技术主动给前端发送消息的实现
    目录使用websocket技术主动给前端发送消息WebSocketConfigWebSocketServerwebsocket基础入门-前端发送消息项目结构如下图使用websocke...
    99+
    2022-11-12
  • Springboot+Netty+Websocket实现消息推送实例是怎样的
    Springboot+Netty+Websocket实现消息推送实例是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 前言We...
    99+
    2022-10-19
  • HTML5 WebSocket怎么实现消息推送
    这篇“HTML5 WebSocket怎么实现消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2022-10-19
  • Android中使用WebSocket实现群聊和消息推送功能(不使用WebView)
    WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。WebSocket是Web2.0时代的新产物,用于弥...
    99+
    2022-06-06
    websocket webview Android
  • springboot如何使用websocket技术主动给前端发送消息
    这篇文章将为大家详细讲解有关springboot如何使用websocket技术主动给前端发送消息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用websocket技术主动给前端发送消息springBoo...
    99+
    2023-06-22
  • Springboot中RocketMQ怎么实现消息发送与接收
    本文小编为大家详细介绍“Springboot中RocketMQ怎么实现消息发送与接收”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot中RocketMQ怎么实现消息发送与接收”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-02
  • SpringBoot整合WebSocket实现后端向前端发送消息的实例代码
    一、什么是 websocket 接口 使用 websocket 建立长连接,服务端和客户端可以互相通信,服务端只要有数据更新,就可以主动推给客户端。 WebSocket 使得客户端和...
    99+
    2023-03-06
    springboot整合websocket推送 spring boot整合websocket springboot主动推送前端
  • 使用springboot整合websocket实现群聊教程
    目录先上效果图:先来准备工作导入依赖导入依赖后扫描启用接收前端传回数据其中重点就是4个注解**@OnOpen,@OnClose,@OnMessage,@OnError**前端页面代码...
    99+
    2022-11-12
  • Swoole webSocket客服IM消息系统怎么实现
    这篇文章主要讲解了“Swoole webSocket客服IM消息系统怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Swoole webSocket客服IM消息系统...
    99+
    2023-07-05
  • Springboot中RocketMQ怎么实现广播消息
    这篇文章主要介绍“Springboot中RocketMQ怎么实现广播消息”,在日常操作中,相信很多人在Springboot中RocketMQ怎么实现广播消息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spr...
    99+
    2023-07-02
  • 用PHP实现微信消息群发分组管理
    作为当今最受欢迎的社交媒体之一,微信已经成为了现代社会中不可缺少的一部分。对于企业或个人而言,微信公众号已经成为了向用户传递信息、推广产品和服务的重要平台。然而,当用户数量增加时,消息的群发变得非常棘手,因为需要进行分组管理。在这篇文章中,...
    99+
    2023-05-14
    PHP 微信消息群发 分组管理
  • 怎么在springboot中用redis实现消息队列
    本篇内容主要讲解“怎么在springboot中用redis实现消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在springboot中用redis实现消息队列”吧!准备阶段安装redi...
    99+
    2023-06-19
  • 怎么用SpringBoot+RabbitMQ实现消息可靠传输
    这篇文章主要介绍了怎么用SpringBoot+RabbitMQ实现消息可靠传输的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用SpringBoot+RabbitMQ实现消息可靠传输文章都会有所收获,下面我们...
    99+
    2023-06-30
  • 怎么在SpringBoot中利用WebSocket实现一个群聊功能
    本篇文章为大家展示了怎么在SpringBoot中利用WebSocket实现一个群聊功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。消息群发创建新项目:添加依赖:<dependency>...
    99+
    2023-06-06
  • 消息推送实现|使用WebSocket主动推送消息到客户端方案
    一. 前言 在开发中,我们经常会遇到这样一类需求:需要在网页上显示天气预报,股票数据或者实时排行榜单等实时变化的数据。对于此类需求,一种较为原始的做法就是让客户端每隔一段时间主动去轮询服务器。但这种做法有一个很大的弊端:如果客户端的数量很大...
    99+
    2023-09-18
    websocket 服务器 网络协议
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作