SpringBoot使用Websocket(一)

SpringBoot使用Websocket(一)webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息,服务端接受到请求并返回相应的信息。连接建立。客户端发送http请求时,通过Upgrade:webSocketConnection:Upgrade告知服务器需要建…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息,服务端接受到请求并返回相应的信息。连接建立。客户端发送http请求时,通过 Upgrade:webSocket Connection:Upgrade 告知服务器需要建立的是webSocket连接,并且还会传递webSocket版本号,协议的字版本号,原始地址,主机地址, webSocket相互通信的Header很小,大概只有2Bytes

本文介绍SpringBoot结合WebSocket实现群发消息, 如想学习如何一对一发送可看我第二篇文章springboot使用websocket(二)

一. 消息群发

1. 导入依赖

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

2. 新建WebSocket配置类

/** * @author Gjing **/
@Configuration
public class WebsocketConfiguration { 
   

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

3. 新建WebSocket服务端

/** * @author Gjing **/
@ServerEndpoint("/test")
@Component
@Slf4j
public class MyWebsocketServer { 
   
    /** * 存放所有在线的客户端 */
    private static Map<String, Session> clients = new ConcurrentHashMap<>();

    @OnOpen
    public void onOpen(Session session) { 
   
        log.info("有新的客户端连接了: {}", session.getId());
        //将新用户存入在线的组
        clients.put(session.getId(), session);
    }

    /** * 客户端关闭 * @param session session */
    @OnClose
    public void onClose(Session session) { 
   
        log.info("有用户断开了, id为:{}", session.getId());
        //将掉线的用户移除在线的组里
        clients.remove(session.getId());
    }

    /** * 发生错误 * @param throwable e */
    @OnError
    public void onError(Throwable throwable) { 
   
        throwable.printStackTrace();
    }

    /** * 收到客户端发来消息 * @param message 消息对象 */
    @OnMessage
    public void onMessage(String message) { 
   
        log.info("服务端收到客户端发来的消息: {}", message);
        this.sendAll(message);
    }

    /** * 群发消息 * @param message 消息内容 */
    private void sendAll(String message) { 
   
        for (Map.Entry<String, Session> sessionEntry : clients.entrySet()) { 
   
            sessionEntry.getValue().getAsyncRemote().sendText(message);
        }
    }
}

4. 启动后,客户端连接websocket

1

5. 客户端发送消息得到的响应和服务端的响应

  • 客户端
    2
  • 服务端
    3

以上为简单的使用案例,更多案例各位可以自行研究,demo源代码地址:!SpringBoot-websocket

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157700.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OpenResty 最佳实践学习–实战演习笔记(5)

    本篇整理openresty的子查询和执行阶段!子查询 capture a —> b 子查询 ,查询内部对另外一个location做了一次查询,并返回结果!调用另一个location不发htttp,相当于内部调用了一次c函数! 京东商品详情页 –openresty的capture (1)很多api (2)无法降级服务 最好只有一个API接口! 每个loca

    2022年2月26日
    73
  • mysql卸载与安装_cad卸载后无法重新安装

    mysql卸载与安装_cad卸载后无法重新安装以Windows10操作系统为例:一、先看看如何卸载1、首先,停止window的MySQL服务,【windows键+R】打开运行框,输入【services.msc】打开(或者找到“控制面板”->“管理工具”->“服务”,停止MySQL后台服务)服务管理器,停止MySQL后台服务。2、卸载MySQL安装程序。找到“控制面板”->”程序…

    2022年9月30日
    3
  • C语言大数运算-乘除法篇「建议收藏」

    C语言大数运算-乘除法篇「建议收藏」前言:这是第三篇博客,也是一次介绍二个计算的博客,可能难度会比前两篇博客大一点,所以建议对于初学者来说一定要看完我的前两篇博客再来看本篇博客,关于本次实验的环境,和思想在第一篇博客已经简单介绍过了,所以不再赘述,我会先介绍大数的乘法载介绍大数的除法,乘法的难点在于要使用一个嵌套循环,除法的难点在于一个字使用符串比较方法的技巧,本次还是会将算法都写成函数,然后在main()函数中调用,原因是在第四

    2022年10月7日
    3
  • mysql 修改字段类型并设置默认值[通俗易懂]

    mysql 修改字段类型并设置默认值[通俗易懂]/*修改表obj_Device,把字段类型channelNum改为TINYINT(3),默认值为8*/altertable obj_DevicechangecolumnchannelNumchannelNumTINYINT(3)NOTNULLDEFAULT8;

    2022年5月1日
    176
  • java 反编译器_JAVA编译器

    java 反编译器_JAVA编译器xjad反编译工具下载使用反编译时把class文件直接拖拽至工具内即可,如果反编译结果不对时把class文件重新去拿原始的不要编辑打开,或者放在一个文件夹内在试。反编译后的代码没有注释、注解等,反正能用得细心看看调整。点击下载工具http://a.xzfile.com/down2/XJadfanbinayi_downcc.zip…

    2022年8月19日
    5
  • flowable工作流所有业务概念

    flowable工作流所有业务概念1.什么是工作流审批根据本人的理解,就是审批流程管理。2.什么是flowable1.官方解释官方解释如下:Flowable项目提供了一套核心的开源业务流程引擎,这些引擎紧凑且高效。它们为开发人员、系统管理员和业务用户提供工作流和业务流程管理(BPM)平台。它的核心是一个闪电般快速、久经考验的动态BPMN流程引擎,伴随着DMN决策表和CMMN案例管理引擎,所有这些引擎都是用Java编写的。它们是Apache2.0许可的开放源代码,拥有一个承诺社区。所有引擎都可以嵌入

    2022年5月11日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号