websocket 连接本地端口_Spring Boot 结合 WebSocket 实现在线聊天
2017 年那会,公众号刚开始写没多久,松哥曾经在公众号上发过一个简易的 WebSocket 的系列,大概只有 5 篇左右。大致上讲了下 WebSocket 的原理以及结合 Java 的具体用法,最后还做了一个五子棋对弈的游戏,在 GitHub 上开源了,感兴趣的小伙伴可以看下。
不过那个系列主要讲 WebSocket 的原生用法,没有谈到 Spring Boot 结合 WebSocket 的用法。在 Spring Boot 中,如果我们使用 WebSocket,可以不必使用晦涩的原生代码,可以结合很多现成的框架来更加方便的实现在线聊天。
今天我们就来看看如何在 Spring Boot 中结合 WebSocket 实现点对点在线聊天。
1.WebSocket 简介
1.1 HTTP/1.1 的升级特性
要说 WebSocket 协议,我们得先来说说 HTTP 协议的一个请求头,事实上,所有的 HTTP 客户端(浏览器、移动端等)都可以在请求头中包含 Connection:Upgrade ,这个表示客户端希望升级请求协议,那么希望升级成什么样的协议呢?我们需要在 Upgrade 头中指定一个或者多个协议的列表,当然这些协议必须兼容 HTTP/1.1 协议。服务器收到请求之后,如果接受升级请求,那么将会返回一个 101 的状态码,表示转换请求协议,同时在响应的 Upgrade 头中使用单个值,这个单个值就是请求协议列表中服务器支持的第一个协议(即请求头的 Upgrade 字段中列出来的协议列表中服务器支持的第一个协议)。
HTTP 升级最大的好处是最终使我们可以使用任意的协议,在升级握手完成之后,它就不再使用 HTTP 连接了,我们甚至可以在升级握手完成之后建立一个 Socket 连接,理论上我们可以使用 HTTP 升级在两个端点之间使用任何自己设计的协议,进而创建出各种各样的 TCP 通信,当然浏览器不会让开发者随意去这么做,而是要指定某些协议,WebSocket 应运而生!
大家来看松哥之前制作的一张图,这里详细解释了 websocket 协议升级的过程:
1.2 WebSocket 协议
OK,了解了 HTTP/1.1 协议的升级特性之后,我们再来详细看看整个过程是怎么样的?
一个 WebSocket 请求首先使用非正常的 HTTP 请求以特定的模式访问一个 URL ,这个 URL 有两种模式,分别是 ws 和 wss,对应 HTTP 协议中的 http 和 https,请求头中除了 Connection:Upgrade 之外还有一个 Upgrade:websocket ,它们两个将共同告诉服务器将连接升级为 WebSocket 这样一种全双工协议。
如此,在握手完成之后,文本消息或者其他二进制消息就可以同时在两个方向上进行发送,而不需要关闭和重建连接。此时的客户端和服务端关系其实是对等的,他们都可以互相向对方主动发消息。
注意
ws 和 wss 模式并不能算作 HTTP 协议的一部分,因为 HTTP 请求和请求头并不包含 URL 模式,HTTP 请求只在请求的第一行中包含相对于服务器的 URL ,在 Host 头中包含域名,而 WebSocket 中特有的 ws 和 wss 模式主要用于通知浏览器和 API 是希望使用 SSL/TLS(wss),还是希望使用不加密的方式(ws)进行连接。
1.3 WebSocket 的优势
说了这么多,那么接下来我们来看看 WebSocket 协议都有哪些优势:
- 由于 WebSocket 连接在端口80(ws)或者443(wss)上创建,与 HTTP 使用的端口相同,这样,基本上所有的防火墙都不会阻塞 WebSocket 连接
- WebSocket 使用 HTTP 协议进行握手,因此它可以自然而然的集成到网络浏览器和 HTTP 服务器中
- 使用该协议,当消息启动或者到达的时候,服务端和客户端都可以知道
.....
等等,还有很多。
1.4 WebSocket 的用途
凡是涉及到即时通讯的,基本上都能用上它:
- 网页上的在线聊天
- 多人在线游戏
- 在线股票网站
- 在线即时新闻网站
- 高清视频流
- 应用集群之间的通信
- 远程系统/软件的状态和性能的实时监控
2. 实战
介绍完基础知识之后,接下来我们就通过一个简单的例子来看看如何在 Spring Boot 中结合 WebSocket 实现在线点对点聊天。废话不多说,看视频(本视频节选自松哥自制的 Spring Boot2 系列视频教程,本集基于 Spring Boot2.1.7 录制)。
WebSocket实现在线聊天https://www.zhihu.com/video/1167024512394092544
3. 结语
好了,不知道小伙伴们看这个视频有没有看懂呢?有问题欢迎留言讨论。本文案例我已经上传到 GitHub:lenve/javaboy-video-samples
websocket 连接本地端口_Spring Boot 结合 WebSocket 实现在线聊天相关推荐
- websocket 连接本地端口_Web应用架构WebSocket 协议介绍
由HyBi工作组开发的WebSocket有线协议(RFC 6455)由两个高级组件组成:用于协商连接参数的开放HTTP握手和二进制消息帧机制,以实现低开销.基于消息的文本和二进制数据传输. WebSo ...
- websocket 连接本地端口_聊聊 WebSocket,还有 HTTP
还记得曾经风靡一时的 QQ 秀聊天室吗?那时,还在上初.高中的我们,QQ 是最常用的聊天交友工具:而 QQ 秀聊天室的出现打破了只能按条件查找好友的局限性,大家可以随意进入聊天室房间,进行在线聊天.怀 ...
- SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法
SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者 ...
- socket接收的消息怎么更新到页面_spring boot 集成 websocket 实现消息主动
前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...
- tcp连接 本地端口_Windows开启端口转发功能
前言 端口转发,这个功能在平时的开发中用到的还是比较多的,记录下 Windows 如何使用自带的软件实现端口转发. 命令介绍 Windows 从 Windows 2000 开始就提供了最基本的端口转发 ...
- 3306端口_Spring Boot随机端口你都不会,怎么动态扩容?
一般情况下每个spring boot工程启动都有固定的端口,但是固定端口不利用服务的动态扩容,如果在一台服务器上需要对同一个服务进行多实例部署,很容易出现端口冲突,那么怎么解决这个问题呢? rando ...
- spring boot 集成 websocket 实现消息主动推送
前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...
- websocket连接不上
初始化页面时,连接websocket,偶尔会出现连接不上的情况,解决办法:加定时器定时连接websocket,直到成功,清除定时器. var ws = null;mounted() {// ws没连上 ...
- 【SpringBoot框架篇】18.使用Netty加websocket实现在线聊天功能
文章目录 1.简介 2.最终功能实现的效果图 2.1.pc端 2.2.移动端 3.实战应用 3.1.引入依赖 3.2.配置文件 3.3.测试demo 3.3.1.消息内容实体类 3.3.2.处理请求的 ...
- rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...
前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...
最新文章
- 6425C-Lab11 配置DNS
- iPhone开发:09年开发领域的最热看点!
- 挖一挖曹大 holmes 的设计与实现
- C# -- HttpWebRequest 和 HttpWebResponse 的使用
- CDM是什么?和CDP有什么区别?
- 挫败帆船行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 图像形状特征(六)--AR模型形状描述子
- 【转载】在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码...
- 【Redis监控工具之treeNMS 】
- DeepFaceLab 新手入门教程
- HTML+CSS基础课程 笔记
- [转]PCI与PCIe
- Word插入脚注后分节符自动变成分页符 解决办法
- Apache RocketMQ 在阿里云大规模商业化实践之路
- 数据统计分析用什么软件(目前最好的7个数据分析软件)
- 便携式三星mysql_三星折叠手机终于来了!9 月 18 日正式发售
- android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc
- EDK2从搭建到运行
- ubuntu16.04下ORB_SLAM2的配置
- 【历史上的今天】9 月 2 日:互联网的“诞生日”;三星逐步跌落神坛;世界上第一个ATM自动取款机