SpringBoot整合WebSocket

WebSocket介绍

WebSocket是一种网络通讯协议,从Html5开始支持的一种在单个 TCP 连接上进行双向通信的协议

HTTP协议是一种无状态的、无连接的、单向的应用层协议,通信请求只能由客户端发起,服务端对请求作出应答处理,http协议无法实现服务器主动向客户端发送消息

这种单向请求的特点,如果服务器有连续的转态发生变化,客户端要获知就非常的麻烦,在以前的解决方案是通过频繁的异步ajax请求实现长轮询,但轮询的效率低,而且非常浪费性能(因为必须不停的连接)

http协议:

在这里插入图片描述

WebSocket协议:

在这里插入图片描述

WebSocket协议

本协议有两部分:握手和数据传输。

握手是基于http的

来自客户端握手(类似如下形式):

GET ws://localhost/chat HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGh1IHNhbXBZSBub25jZQ==
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Version: 13

来自服务端握手(类似如下形式):

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9KYGzzhZRbK+xOo==
Sec-WebSocket-Extensions: permessage-deflate

字段说明

头名称说明
Connection: Upgrade标识该HTTP请求时一个协议升级请求。
Upgrade: websocket协议升级为WebSocket协议
Sec-WebSocket-Version: 13版本号
Sec-WebSocket-Key客户端采用base64编码的24位随机字符序列,服务端接受客户端HTTP协议升级的证明,要求服务端响应一个对应加密的Sec-WebSocket-Accept头信息作为应答。
Sec-WebSocket-Extensions协议扩展类型

客户端(浏览器)实现

WebSocket对象

浏览器通过 WebSocket 对象公开所有必须的客户端功能(支持HTML5的浏览器)

// url(以ws开头): ws://ip:port/资源名称
var ws = new WebSocket(url);

WebSocket事件和方法

事件

事件描述
onopen连接建立时触发
onmessage接受到服务端数据时触发
onerror通信发生错误时触发
onclose连接关闭时触发

方法

方法描述
send()向服务端发送数据

服务端(Java)实现

从Tomcat7.0.5版本开始支持WebSocket,Java WebSocket应用由一系列的WebSocketEndpoint组成,Endpoint是一个java对象,代表WebSocket链接的一端,对于服务端,我们可以视为处理具体WebSocket消息的接口,就像Servlet与http请求一样。

有如下两种方式定义Endpoin:

  • 编程式:即继承 javax.websocket.Endpoint 类,并实现其方法。
  • 注解式:定义一个POJO,并添加@ServerEndpoint相关注解。

Endpoint实例在WebSocket握手时创建,在客户端与服务端链接过程中有效,在链接关闭时结束

生命周期方法如下:

方法含义描述对应注解
onOpen当开启一个新的会话时调用,客户端与服务端握手成功后调用@onOpen
onClose当会话关闭时调用@onClose
onError当连接过程中出现异常时调用onError
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值