Tomcat实现WebSocket即时通讯 & Java实现WebSocket的两种方式

HTTP协议是"请求-响应"模式,浏览器必须先发请求给服务器,服务器才会响应该请求。即服务器不会主动发送数据给浏览器。

实时性要求高的应用,如在线游戏、股票实时报价和在线协同编辑等,浏览器需实时显示服务器的最新数据,因此出现Ajax和Comet技术:

  • Ajax本质还是轮询
  • Comet基于HTTP长连接做了一些hack

但它们实时性不高,频繁请求也会给服务器巨大压力,也浪费网络流量和带宽。于是HTML5推出WebSocket标准,使得浏览器和服务器之间任一方都可主动发消息给对方,这样服务器有新数据时可主动推给浏览器。

WebSocket原理

网络上的两个程序通过一个双向链路进行通信,这个双向链路的一端称为一个Socket。一个Socket对应一个IP地址和端口号,应用程序通常通过Socket向网络发出或应答网络请求。

Socket不是协议,是对TCP/IP协议层抽象出来的API。

WebSocket跟HTTP协议一样,也是应用层协议。为兼容HTTP协议,它通过HTTP协议进行一次握手,握手后数据就直接从TCP层的Socket传输,与HTTP协议再无关。

这里的握手指应用协议层,不是TCP层,握手时,TCP连接已建立。 即HTTP请求里带有websocket的请求头,服务端回复也带有websocket的响应头。

浏览器发给服务端的请求会带上跟WebSocket有关的请求头,比如Connection: Upgrade和Upgrade: websocket

若服务器支持WebSocket,同样会在HTTP响应加上WebSocket相关的HTTP头部:

这样WebSocket连接就建立好了。

WebSocket的数据传输以frame形式传输,将一条消息分为几个frame,按先后顺序传输出去。为何这样设计?

  • 大数据的传输可以分片传输,无需考虑数据大小问题
  • 和HTTP的chunk一样,可边生成数据边传输,提高传输效率

Tomcat如何支持WebSocket

链接:https://juejin.cn/post/7095918534210879519

Java实现WebSocket的两种方式

参考 https://www.cnblogs.com/onlymate/p/9521327.html

相关推荐
零千叶21 分钟前
【面试】AI大模型应用原理面试题
java·设计模式·面试
坐吃山猪5 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫5 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao5 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区7 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT8 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy8 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss9 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续9 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升