当前位置: 首页 > news >正文

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

推荐WebSocket的三大理由:

  • 1、采用全双工通信,摆脱传统HTTP轮询的窘境。
  • 2、采用W3C国际标准,完美支持HTML5。
  • 3、简单高效,容易上手。

学习目标

快速学会通过WebSocket编写简单聊天功能。

温馨提示:

1、WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

2、浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

3、当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

使用教程

一、打造 WebSocket 聊天客户端

温馨提示:得益于W3C国际标准的实现,我们在浏览器JS就能直接创建WebSocket对象,再通过简单的回调函数就能完成WebSocket客户端的编写,非常简单!接下来让我们一探究竟。

使用说明:

使用步骤:1、获取WebSocket客户端对象。

例如: var webSocket = new WebSocket(url);

使用步骤:2、获取WebSocket回调函数。

例如:webSocket.onmessage = function (event) {console.log('WebSocket收到消息:' + event.data);

0c89fb4b663a42fc849adc5a6272d23d

使用步骤:3、发送消息给服务端

例如:webSokcet.send(jsonStr) 结合实际场景 本案例采用JSON字符串进行消息通信。

具体实现:

下面是本案例在线聊天的客户端实现的JS代码,附带详细注释。

========================================================================

二、打造 WebSocket 聊天服务端

温馨提示:得益于SpringBoot提供的自动配置,我们只需要通过简单注解@ServerEndpoint就就能创建WebSocket服务端,再通过简单的回调函数就能完成WebSocket服务端的编写,比起客户端的使用同样非常简单!

使用说明:

首先在POM文件引入spring-boot-starter-websocket 、thymeleaf 、FastJson等依赖。

使用步骤:1、开启WebSocket服务端的自动注册。

【这里需要特别提醒:ServerEndpointExporter 是由Spring官方提供的标准实现,用于扫描ServerEndpointConfig配置类和@ServerEndpoint注解实例。使用规则也很简单:1.如果使用默认的嵌入式容器 比如Tomcat 则必须手工在上下文提供ServerEndpointExporter。2. 如果使用外部容器部署war包,则不要提供提供ServerEndpointExporter,因为此时SpringBoot默认将扫描服务端的行为交给外部容器处理。】

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

使用步骤:2、创建WebSocket服务端。

核心思路:

  • ① 通过注解@ServerEndpoint来声明实例化WebSocket服务端。
  • ② 通过注解@OnOpen、@OnMessage、@OnClose、@OnError 来声明回调函数。
fb1b1302c02d456599489864a5156e15
  • ③ 通过ConcurrentHashMap保存全部在线会话对象。
@Component@ServerEndpoint("/chat")//标记此类为服务端public class WebSocketChatServer { /** * 全部在线会话 PS: 基于场景考虑 这里使用线程安全的Map存储会话对象。 */ private static Map onlineSessions = new ConcurrentHashMap<>(); /** * 当客户端打开连接:1.添加会话对象 2.更新在线人数 */ @OnOpen public void onOpen(Session session) { onlineSessions.put(session.getId(), session); sendMessageToAll(Message.jsonStr(Message.ENTER, 

相关文章:

  • python3.7新功能_Python 3.7 正式发布, 大量新特性和优化
  • python info()怎么看_怎么学python?看完这篇,30天学会python
  • python 使用pyinstaller报错_使用pyinstaller打包python时报错No module named XXX解决方法
  • class括号里的object_python里class是什么
  • stl clocklist 查找元素_C++ STL 常用算法总结
  • rcnn代码实现_Detectron2代码学习2 -- 检测模型实现
  • ransac算法_无人驾驶算法学习(一):激光里程计之帧间匹配算法
  • java安装步骤_jmeter安装及环境配置(一)
  • python xlsx读写_Python Excel文件的读写操作(xlwt xlrd xlsxwriter)
  • python 折线图标签_matplotlib 曲线图 和 折线图 plt.plot()实例
  • matlab eig函数_心心念念的matlab基础及入门来啦!
  • python与html结合_Python在字符串中处理html和xml的方法
  • 怎么下载安装python_【转】如何下载安装python
  • eclipse maven打包jar_Maven 异常信息:jar包缺失或损坏,导致编译、打包错误
  • python indexerror_Python 未超索引情况下 显示 IndexError
  • [译] React v16.8: 含有Hooks的版本
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【刷算法】求1+2+3+...+n
  • 230. Kth Smallest Element in a BST
  • Android框架之Volley
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CentOS7简单部署NFS
  • hadoop集群管理系统搭建规划说明
  • Java基本数据类型之Number
  • Logstash 参考指南(目录)
  • mongodb--安装和初步使用教程
  • passportjs 源码分析
  • SQLServer之创建显式事务
  • Web设计流程优化:网页效果图设计新思路
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 观察者模式实现非直接耦合
  • 回顾2016
  • 简析gRPC client 连接管理
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 在Mac OS X上安装 Ruby运行环境
  • 最近的计划
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​configparser --- 配置文件解析器​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)共用体union的用法举例
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (接口封装)
  • (排序详解之 堆排序)
  • (四)c52学习之旅-流水LED灯
  • (一)appium-desktop定位元素原理
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...